我必須以這種方式基于單個列在我的 SQL 查詢 (DISTINCT) 中聚合資料:
原表:
id|var_val|id_res_id|var_id_id|device_id|var_val_conv
11|126 |3864 |36 |abc123 |1.21
10|136 |3764 |36 |abc123 |1.51
9 |115 |3582 |35 |abc123 |4.41
8 |143 |2464 |36 |abc123 |8.81
7 |226 |1844 |35 |abc123 |9.21
6 |12 |3364 |34 |abc123 |11.7
所以我會根據列 var_id_id 聚合資料,其中只有 var_id_id 的每個不同值的第一個資料,例如:
結果:
id|var_val|id_res_id|var_id_id|device_id|var_val_conv
11|126 |3864 |36 |abc123 |1.21
9 |115 |3582 |35 |abc123 |4.41
6 |12 |3364 |34 |abc123 |11.7
我嘗試了這個查詢,但我沒有得到我想要的:
SELECT VR.id, var_val, id_res_id, var_id_id, AR.device_id, var_val_conv
FROM public.api_site_varsresults as VR,
public.modbus_modbusvariable as MV,
public.api_site_results as AR
WHERE VR.var_id_id = MV.id AND VR.id_res_id = AR.id
AND AR.device_id = 'abc123'
GROUP BY VR.id, var_id_id, AR.device_id
ORDER BY VR.id DESC;
我如何才能對每個結果只遇到第一行的 var_id_id 進行分組?
非常感謝提前
uj5u.com熱心網友回復:
在這種情況下,您可以通過以下first_value方式使用視窗函式:
WITH ids AS (SELECT DISTINCT
first_value(id) over (partition by var_id_id order by id desc) id
FROM api_site_results as VR
) SELECT * FROM ids JOIN api_site_results USING(id);
PostgreSQL 視窗函式在線
結果:
==== ========= =========== =========== =========== ==============
| id | var_val | id_res_id | var_id_id | device_id | var_val_conv |
==== ========= =========== =========== =========== ==============
| 11 | 126 | 3864 | 36 | abc123 | 1.21 |
---- --------- ----------- ----------- ----------- --------------
| 9 | 115 | 3582 | 35 | abc123 | 4.41 |
---- --------- ----------- ----------- ----------- --------------
| 6 | 12 | 3364 | 34 | abc123 | 11.7 |
---- --------- ----------- ----------- ----------- --------------
uj5u.com熱心網友回復:
來自 postresql 的“distinct on”會做到這一點
select distinct on(var_id_id) t.*
from api_site_results t
order by var_id_id;
資料庫小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/366525.html
標籤:sql PostgreSQL的
上一篇:從資料庫SQL中的列中獲取日期
