2016-08-18 1 views
0
Table1  
Id, CatygoryId, Name, DataCreate 

는 내가 얻을 원하는그룹의 최대 날짜 행을 가져 오는 방법은 무엇입니까?

예에게 쿼리의 결과에

Id CatygoryId Name DataCreate 

1  1   Name1 10/08/2016 
2  1   Name2 11/08/2016 
3  1   Name3 12/08/2016 
4  1   Name4 13/08/2016 
5  2   Name5 18/08/2016 
6  2   Name6 19/08/2016 

을함으로써 그룹이 데이터를 원하는 최대 DataCreate와 그룹 행에서 얻을

4  1   Name4 13/08/2016 
6  2   Name6 19/08/2016 
+1

그래서, 당신이 무엇을 시도 : yyyymmdd 형식을 사용하여이 쿼리를 고려? – YakovL

+1

http://stackoverflow.com/questions/7118170/sql-server-select-only-the-rows-with-maxdate –

+0

@Josh Part 링크가 최대 날짜 인 행만 얻는 방법에 대한 답변이 있지만 그룹의 행을 가져 오는 방법 최대 날짜가있는 행 – Greg

답변

0
select max(Id), CatygoryId, max(Name), max(DataCreate) 
from Table1 
group by CatygoryId 
+0

그 코드는 이전에 이미 테스트했지만 이름은 다른 데이터를 반환했습니다. – Greg

+0

@Greg 그래서 질문에 시도한 것을 추가하도록 제안했습니다. – YakovL

0

사용해보기

CREATE TABLE #TEMP_TABLE(ID INT, CatygoryId INT, Name VARCHAR(30), DataCreate DATE) 

INSERT INTO #TEMP_TABLE 

SELECT 1,  1,   'Name1', '08/10/2016' UNION ALL 
SELECT 2,  1,   'Name2', '08/11/2016' UNION ALL 
SELECT 3,  1,   'Name3', '08/12/2016' UNION ALL 
SELECT 4,  1,   'Name4', '08/13/2016' UNION ALL 
SELECT 5,  2,   'Name5', '08/18/2016' UNION ALL 
SELECT 6,  2,   'Name6', '08/19/2016' 


;WITH T1 
AS 
(
    SELECT ROW_NUMBER() OVER(PARTITION BY CatygoryId ORDER BY DataCreate DESC) ROW_NO, * 
    FROM #TEMP_TABLE 
) 
SELECT * 
FROM T1 
WHERE T1.ROW_NO=1 
-1

ID별로 그룹화하려는 것 같습니다. 또한 가장 최근 날짜 또는 맨 위 (2, 3 등) 레코드를 원하십니까? Btw은

, 나는 그러나 'YYYYMMDD'로 날짜 형식을 변경해야합니다, 당신은 같은 것을 고려할 수 있습니다 생각 (쉽게/가장 최근의 최대 찾을 수) 당신이 yyyymmdd 형식이

고려를 :


아이디, CatygoryId, 이름, DataCreate

검색어 :

Select Id, Name, CategoryId, DateCreated from Table1 
Where DateCreate = (Select MAX(DateCreated) from Table1) 
Group by Id 

참고 : 이것은 가장 최근 날짜의 모든 기록을 제공 할 것이며, 나는 yyyymmdd 년 형식을 고려한 것을 기억합니다.

첫 번째 레코드 이상을 원할 경우

Select Id, Name, CategoryId, DateCreated from Table1 
Where DateCreate = (Select top (# of rows you would like to return) Datecreated from Table1 

Order by DateCreated Desc) 
Group by Id 
관련 문제