2014-09-19 36 views
0

我认为这个问题已经得到解答,但它不能满足我的问题。SQL选择最大列组一列的Columnid

我想通过我的表格中的最近日期值(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] 

但我得到这个错误:

Column 'ID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

回答

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是每一个组是相同的,你可以简单的GROUP BY子句中添加Name

GROUP BY ID, Name 
+0

如果我的身份证不是按顺序(1,2,3,4,...,n),该怎么办?这个问题还有意义吗? – Brent 2014-09-19 09:24:22

+0

@Brent不要紧。 'ROW_NUMBER()'产生序列号。请参阅[排名函数](http://msdn.microsoft.com/zh-cn/library/ms189798.aspx) – 2014-09-19 09:25:40