2014-05-19 83 views
-2
ID Sum Name 
a 10 Joe 
a 8 Mary 
b 21 Kate 
b 110 Casey 
b 67 Pierce 

,你會推薦什麼是最好的方式來獲得 每個ID對應於最大的一筆(由ID分組)的名稱爲每個唯一值的最大值。 我試了一下,到目前爲止:SQL查詢來獲得另一列

select ID, SUM(Sum) s, Name 
from Table1 
group by ID, Name 
Order by SUM(Sum) DESC; 

這將安排記錄成第一個具有最高總和組。然後,我必須以某種方式標記這些記錄並僅保留這些記錄。任何提示或指針?非常感謝

最後,我想獲得:

a 10 Joe 
b 110 Casey 

回答

1

你想要的row_number()功能:

select id, [sum], name 
from (select t.*] 
      row_number() over (partition by id order by [sum] desc) as seqnum 
     from table1 
    ) t 
where seqnum = 1; 

你的問題較爲混亂比它需要的,因爲你有一個名爲sum的列。您應該避免使用SQL保留字作爲標識符。

row_number()函數將序列號分配給從1開始的一組行。該組由partition by子句定義。在這種情況下,所有具有相同id的行都在同一組中。數字的排序由order by子句確定,因此具有最大值sum的那個得到值1

如果您可能有重複的最大值並且您想要所有這些值,請使用相關功能rank()dense_rank()

+0

1詳細 –

0
select * 
from 
(
    select * 
    ,rn = row_number() over (partition by Id order by sum desc) 
    from table 
)x 
where x.rn=1 

demo