我认为这个问题已经得到解答,但它不能满足我的要求。
我想在表格中按最新日期值(MAX
)选择名称组的id / s。使用按列Name
分组并按列Date
分组,我必须获得ID
,Name
,Date
。
这是我的表
ID Name Date
---------------------------------------
1 Brent 2012-02-17
2 Ash 2012-08-02
3 Brent 2012-08-15
4 Harold 2012-09-30
5 Margaret 2012-10-10
6 Ash 2012-12-01
7 Harold 2013-02-14
8 Ash 2012-01-01
9 Brent 2013-05-11
输出必须是:
ID Name Date
---------------------------------------
5 Margaret 2012-10-10
6 Ash 2012-12-01
7 Harold 2013-02-14
9 Brent 2013-05-11
我试着这句话:
SELECT
[ID], [Name], MAX([Date]) as [Date]
FROM
[SampleTable]
GROUP BY
[Name]
但是我收到了这个错误:
列'ID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
答案 0 :(得分:3)
您可以使用窗口功能,例如ROW_NUMBER()
SELECT a.ID, a.Name, a.Date
FROM
(
SELECT ID, Name, Date,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY DATE DESC) rn
FROM TableName
) a
WHERE a.rn = 1
如果ID
和Name
对于每个组都相同,则只需在Name
子句中添加GROUP BY
即可。
GROUP BY ID, Name