[英]SQL Query: Get rows where value of certain column is maximum
這是我正在處理的數據的示例:
Ei
(第一列)是主鍵。
E0 S0 DT0 V1
E1 S1 DT1 V1
E2 S1 DT2 V1
E3 S1 DT3 V3
我正在嘗試對此進行過濾以獲得:
E0 S0 DT0 V1
E3 S1 DT3 V3
基本上,使行具有相同的Si
然后選擇Vi
最高/最大的行。 Vi
的形式為w.xy.z(其中w,x,y,z為整數)。
我不知道該怎么做。 有指針嗎?
select ei, si, dti, vi from (
select ei, si, dti, vi,
row_number() over(partition by si order by vi desc) rw
from your_tab
) as t where rw = 1;
您可以使用分析功能(在這種情況下為ROW_NUMBER)。
解析函數類似於聚合函數,因為它們被應用於一組行。 但是它們為每一行返回一個值。
PARTITION BY
定義一個組, ORDER BY
定義該組內的順序
ROW_NUMBER根據ORDER BY為組中的每一行分配一個連續的行號(對於si
的每個不同值,第一行號為1)
如果需要通過關系檢索結果,則可以使用RANK / DENSE_RANK函數。 它們為“權重”相等的行分配相同的行號。
例如
E0 S0 DT0 V1
E1 S1 DT1 V1
E2 S1 DT2 V1
E3 S1 DT3 V3
E4 S1 DT4 V3
RANK / DENSE_RANK將返回
E0 S0 DT0 V1
E3 S1 DT3 V3
E4 S1 DT4 V3
ROW_NUMBER
E0 S0 DT0 V1
E3 S1 DT3 V3 (or E4 S1 DT4 V3)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.