簡體   English   中英

SQL查詢:獲取某些列的值最大的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM