2014-04-25 3 views
1

SQL Server 2008 R2를 사용하고 있습니다. 내 관리 스튜디오 WORK에 테이블이 있습니다. 이 표에있는 각 직원의 상위 3 개 레코드를 가져 오려고합니다. 이 테이블에는 기본 키 workID과 외래 키 employeeiD이 있습니다. 표는 날짜별로 내림차순으로 정렬됩니다. 다른 테이블에 조인 할 필요가 없습니다. 현재 employeeID에 대한 상위 3 개 레코드 만 가져옵니다. 다음은 예제 쿼리입니다.고유 ID가있는 중복 레코드에서 상위 3 개 레코드 가져 오기

SELECT 
    wtop.workid, wtop.employeeid 
FROM 
    work wtop 
WHERE 
    wtop.employeeid IN (SELECT TOP 3 wsub.employeeid 
         FROM work wsub 
         WHERE wsub.employeeid = wtop.employeeid 
         ORDER BY wsub.employeeid) 
+0

같은

뭔가 쿼리가 expectedresults를 반환하지 않습니다 –

+0

를 직면하고있는 문제. 테이블의 각 employeeID에 대해 상위 3 개 레코드를 가져 오려고합니다. 나는 count()와 group by을 시도하고있다. – MartinZPetrov

답변

5

사용 방법은 ROW_NUMBER입니다. Martin..mention @

;WITH WorkVals AS (
     SELECT *, 
       ROW_NUMBER() OVER(PARTITION BY employeeID ORDER BY [Date] DESC) RowID 
     FROM Work 
) 
SELECT * 
FROM WorkVals 
WHERE RowID <= 3 
+0

ROW_NUMBER 및 PARTITION BY를 완벽하게 사용합니다. 좋은 대답 –

관련 문제