SQL Server分组依据?

时间:2018-12-10 19:43:03

标签: sql sql-server

我不确定如何表达我的问题,所以也许最好的例子是。我正在寻找一个可以从单个表中产生以下结果的函数或语句。对于每个名称,返回ID最大的行。

ID  NAME        ADDRESS

1   JOHN DOE    123 FAKE ST.
2   JOHN DOE    321 MAIN ST.
3   JOHN DOE    333 2ND AVE.
4   MARY JANE   222 1ST. AVE
5   MARY JANE   444 POPLAR ST.
6   SUZY JO     999 8TH AVE.

DESIRED RESULT

3   JOHN DOE    333 2ND AVE.
5   MARY JANE   444 POPLAR ST.
6   SUZY JO     999 8TH AVE.

1 个答案:

答案 0 :(得分:1)

一种选择是使用row_number窗口功能。这使您可以为结果集建立行号。然后,您可以在over子句中定义分组和排序,在这种情况下,您想partition by(分组)name字段和order by id场降序。最后,您对那些结果where rn = 1进行过滤,这些结果将返回每个分组的最大结果。

select * 
from (
    select *, row_number() over (partition by name order by id desc) rn
    from yourtable
) t
where rn = 1