[2 [2
通常,數據庫查詢需要在列中找到最大值,並從同一行中的其他列中檢索相應的數據。 對於非常大的數據集,這尤其具有挑戰性。 考慮需要一張需要找到每個唯一ID的最高版本編號以及其關聯的標籤:
id | 標籤| 版本 ------ ------------------------- 1 | A | 10 2 | A | 20 3 | b | 99 4 | C | 30 5 | f | 40 [2
id | 標籤| 版本 ------ ------------------------- 2 | A | 20 3 | b | 99 4 | C | 30 5 | f | 40
對於具有約2800萬行的表,嵌套等標準方法shite max
可以非常慢。 一個更有效的解決方案使用ID | tag | version
----- ----- -----
1 | A | 10
2 | A | 20
3 | B | 99
4 | C | 30
5 | F | 40
此查詢有兩個步驟:
ID | tag | version
----- ----- -----
2 | A | 20
3 | B | 99
4 | C | 30
5 | F | 40
partition(具有相同ID的行組)中的每一行分配唯一的等級(。排名基於降序的列,這意味著最高版本獲得等級1。
外部查詢:它從內部查詢中過濾結果,僅選擇行
。 這有效地為我們提供了每個的最大值
。
SELECT s.id, s.tag, s.version
FROM (
SELECT t.*,
ROW_NUMBER() OVER(PARTITION BY t.id ORDER BY t.version DESC) AS rnk
FROM YourTable t
) s
WHERE s.rnk = 1;
row_number()的使用提供了一種干淨有效的方法來實現所需的結果。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3