我确信这已在其他地方被问到并回答了,但我无法简洁地表达这个问题。所以采取简化的表格:
ID Year Name
--------------------
1 2015 A
1 2014 B
1 2016 C
2 2011 D
2 2002 E
2 2014 F
我想运行一个查询,返回与每个ID最近(最高)年份对应的Name,所以:
ID Name
-----------
1 C
2 F
我假设有一些涉及的WITH / AS语句,一个GROUP BY,一个MAX(),也许是一个视图?我不确定。有什么帮助吗?
答案 0 :(得分:2)
使用distinct on()
select distinct on (id) id, name
from the_table
order by id, name desc;
使用标准SQL,可以使用窗口函数完成:
select id, name
from (
select id, name,
max(name) over (partition by id) as max_name
from the_table
) t
where name = max_name;
distinct on
解决方案通常比使用窗口函数的解决方案更快,但它不可移植。
SQLFiddle示例:http://sqlfiddle.com/#!15/c4e74/1