SQL选择具有最多列组的Columnid一列

时间:2014-09-19 09:06:11

标签: sql sql-server sql-server-2008 tsql

我认为这个问题已经得到解答,但它不能满足我的要求。

我想在表格中按最新日期值(MAX)选择名称组的id / s。使用按列Name分组并按列Date分组,我必须获得IDNameDate

这是我的表

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子句中。

1 个答案:

答案 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

如果IDName对于每个组都相同,则只需在Name子句中添加GROUP BY即可。

GROUP BY ID, Name