这个话题可能有点不清楚,但我无法用一句话描述我想要实现的目标。
假设我有一个表(列)
id INT PK
name VARCHAR
date DATE
我有分组选择
select
name,
max(date)
from table
group by name
给我一个名字和最新日期。
将id列连接到当前聚合结果集的最简单方法是使用id值,其中日期是最大值? 的
让我用一个例子解释我的目标:
该表填充了以下数据
id name date
1 david 2012-12-12
2 david 2013-12-02
3 patrick 2014-01-02
4 patrick 2012-11-11
根据我的疑问,我希望得到以下结果
id name date
2 david 2013-12-02
3 patrick 2014-01-02
请注意,name = 'david'
的所有记录都已汇总,并且选择了最大日期。如何获取此最大日期的行ID?
答案 0 :(得分:1)
一种选择是使用ROW_NUMBER()
:
SELECT id, name, date
FROM (
SELECT id, name, date,
row_number() over (partition by name order by date desc) rn
FROM yourtable
) t
WHERE rn = 1
另一种选择是使用MAX()
聚合将表连接回自身。如果多个ID /名称组合共享相同的最大日期,则此选项可能会导致联系:
SELECT t.id, t.name, t.date
FROM yourtable t
JOIN (SELECT name, max(date) maxdate
FROM yourtable
GROUP BY name) t2 on t.name = t2.name AND t.date = t2.maxdate