2012-07-04 126 views
2

我需要爲具有ID1,ID2,ID3,AB的5列的表編寫查詢。這裏, ID1,ID2ID3構成主鍵。使用Oracle/SQL組查找最大值

對於每個ID1,找到最大值A。如果兩個或多個A s具有最大值,請選擇最大的唯一一條記錄B。最後用相應的ID2ID3的值顯示結果。

例如,下面的表

ID1 ID2 ID3 A B 
    1 2 3 10 5 
    1 3 4 30 4 
    1 3 5 30 3 
    2 2 3 5 1 
    2 3 4 9 2 
    2 3 5 11 3 

用於查詢應顯示的結果如下。

ID1 ID2 ID3 Max_A 
    1 3 4  30 
    2 3 5  11 

回答

3

的這個主旨是

  • 添加ROW_NUMBER給每一行
  • 重啓對於每個ID1
  • ORDER從高至低的數量上AB
  • 把它放在一個CTE爲方便上rn

SQL語句

;WITH q AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY ID1 ORDER BY A DESC, B DESC) AS rn 
    FROM YourTable 
) 
SELECT * 
FROM q 
WHERE rn = 1 
+1

+1,但我認爲你需要切換*在CTE爲ID1,ID2,ID3,使其合成正確 –

+0

它的工作原理。謝謝。 –