문제

나는 둘 다 정수 인 ID 및 개정의 복합 기본 키를 포함하는 테이블 구조가 있습니다.

각 행의 최신 개정을 반환하는 쿼리가 필요합니다. 내가 이해했다면 이 답변 올바르게 다음은 Oracle DB에서 작업했을 것입니다.

SELECT Id, Title
FROM ( SELECT Id, Revision, MAX(Revision) OVER (PARTITION BY Id) LatestRevision FROM Task )
WHERE Revision = LatestRevision

SQL Server (2005)를 사용하고 있으며이를 수행하려면 수행자 쿼리가 필요합니다.

도움이 되었습니까?

해결책

보다 이것 최고의 전략의 ealuation을 위해 Ayende에 의해 게시됩니다.

다른 팁

나는 이것이 효과가 있다고 생각한다 (나는 그것을 테스트하지 않았다) ...

SELECT      ID, 
            Title
FROM        Task AS T
INNER JOIN
(
    SELECT          ID, 
                    Max(Revision)
    FROM            Task
    GROUP BY        ID
) AS sub
ON          T.ID = sub.ID
AND         T.Revision = sub.Revision

나는 다음과 같은 하위 쿼리를 만들려고 노력할 것입니다.

Task T에서 ID, 제목을 선택하십시오.

또 다른 옵션은 "속임수"를 작성하고 한 항목이 추가되면 개정판을 최신 개정으로 표시하는 트리거를 작성하는 것입니다. 그런 다음 해당 필드를 색인에 추가하십시오. (테이블을 연결하여 삽입 할 것입니다)

또한 ID의 색인, 개정 DESC는 성능에 도움이 될 수 있습니다.

게시 한 쿼리는 구문 오류가 수정 된 SQL 2005 (호환 모드 90)에서 작동합니다.

SELECT t1.Id, t1.Title
FROM ( SELECT Id, Revision, MAX(Revision) OVER (PARTITION BY Id) LatestRevision FROM Task ) AS x
JOIN Task as t1
ON   t1.Revision = x.LatestRevision
AND  t1.id       = x.id

이 시도:

DECLARE @YourTable table(RowID int, Revision int, Title varchar(10))
INSERT INTO @YourTable VALUES (1,1,'A')
INSERT INTO @YourTable VALUES (2,1,'B')
INSERT INTO @YourTable VALUES (2,2,'BB')
INSERT INTO @YourTable VALUES (3,1,'C')
INSERT INTO @YourTable VALUES (4,1,'D')
INSERT INTO @YourTable VALUES (1,2,'AA')
INSERT INTO @YourTable VALUES (2,3,'BBB')
INSERT INTO @YourTable VALUES (5,1,'E')
INSERT INTO @YourTable VALUES (5,2,'EE')
INSERT INTO @YourTable VALUES (4,2,'DD')
INSERT INTO @YourTable VALUES (4,3,'DDD')
INSERT INTO @YourTable VALUES (6,1,'F')

;WITH YourTableRank AS
(
SELECT
    RowID,Revision,Title, ROW_NUMBER() OVER(PARTITION BY RowID ORDER BY RowID,Revision DESC) AS Rank
    FROM @YourTable
)
SELECT
    RowID, Revision, Title
    FROM YourTableRank
    WHERE Rank=1

산출:

RowID       Revision    Title
----------- ----------- ----------
1           2           AA
2           3           BBB
3           1           C
4           3           DDD
5           2           EE
6           1           F

(6 row(s) affected)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top