SQL Server에서이를 파악할 수 없습니다.SQL Server에서 집계 된 최대 행 찾기
두 테이블 :
상태 :
id proj status changedate
-------------------------------
1 1 1 2015-01-01
2 1 3 2016-01-01
3 1 2 2016-05-01
4 2 1 2016-01-01
... etc
프로젝트 :
id title active
----------------------------
1 My project 1
2 No more 0
이 지금은 가장 최근의 상태 ID로 모든 활성 프로젝트를 나열합니다. 다양한 종류의 쿼리를 시도했지만 오류가 발생합니다.
는 HAVING 다른 솔루션 포함 중이 시도했지만 운 :SELECT projects.id, projects.title, statuses.status
FROM projects
INNER JOIN statuses ON statuses.proj = projects.id
WHERE projects.active = 1
AND statuses.changedate = MAX(statuses.changedate)
거기에 모든 SQL 서버 마법사?
이SELECT p.id, p.title, s.status
FROM projects p INNER JOIN
statuses s
ON s.proj = p.id
WHERE p.active = 1 AND
s.changedate = (SELECT MAX(s2.changedate)
FROM statuses s2
WHERE s2.proj = p.id
);
보다 일반적인 솔루션은 ROW_NUMBER()
사용 :
SELECT p.id, p.title, s.status
FROM projects p INNER JOIN
(SELECT s.*,
ROW_NUMBER() OVER (PARTITION BY s.proj ORDER BY s.changedate DESC) as seqnum
FROM statuses s
) s
ON s.proj = p.id AND seqnum = 1
WHERE p.active = 1;
그리고 더 헤아릴 수없는 방법 APPLY
사용
SELECT p.*, s.status
FROM projects p OUTER APPLY
(SELECT TOP 1 s.*
FROM status s
WHERE s.proj = p.id
ORDER BY s.changedate DESC
) s
WHERE p.active = 1;
당신이있는 경로로
감사합니다. 전에 서브 쿼리 방법을 시도했지만 결코 알아 내지 못했습니다. :) – jtheman