2014-05-19 82 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