2012-07-04 409 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

它的工作原理。谢谢。 –