我不确定如何表达我的问题,所以也许最好的例子是。我正在寻找一个可以从单个表中产生以下结果的函数或语句。对于每个名称,返回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.
答案 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