2014-09-19 3 views
0

이 질문에 이미 답변되었지만 제 질문을 만족시키지 못했습니다.SQL 하나의 열로 최대 열 그룹을 가진 Columnid를 선택하십시오.

내 테이블의 최신 날짜 값 (MAX)으로 이름 그룹의 ID를 선택하고 싶습니다. 그룹 Name 및 그룹 Date 그룹을 사용하여 ID, Name, Date을 얻어야합니다.

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.

,369을 여기

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 

출력이 있어야합니다 내 테이블

답변

3

당신이 모든 그룹에 대해 동일 같은 ID 경우

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 

ROW_NUMBER()로하고 Name창 기능을 사용할 수 있습니다, 당신은 단순히 GROUP BY 절에 Name를 추가 할 수 있습니다.

GROUP BY ID, Name 
+0

내 ID의 순서가 잘못되어 있으면 (1, 2, 3, 4, ..., n) 어떻게 될까요? 그것은 여전히 ​​문제를 이해할 수 있습니까? – Brent

+0

@ 브렌트 그건 중요하지 않습니다. 'ROW_NUMBER()'는 연속 번호를 생성합니다. [순위 기능] (http://msdn.microsoft.com/en-in/library/ms189798.aspx)을 참조하십시오. –

관련 문제