2009-07-29 2 views
0

다음은 각 감사 필드의 최신 값을 찾는 올바른 방법인지 궁금합니다.SQL Select 모범 사례

USE tempdb 
CREATE Table Tbl(
TblID Int, 
AuditFieldID Int, 
AuditValue Int, 
AuditDate Date 
) 
GO 
INSERT INTO Tbl(TblID,AuditFieldID,AuditValue,AuditDate) VALUES(1,10,101,'1/1/2001') 
INSERT INTO Tbl(TblID,AuditFieldID,AuditValue,AuditDate) VALUES(2,10,102,'1/1/2002') 
INSERT INTO Tbl(TblID,AuditFieldID,AuditValue,AuditDate) VALUES(3,20,201,'1/1/2001') 
INSERT INTO Tbl(TblID,AuditFieldID,AuditValue,AuditDate) VALUES(4,20,202,'1/1/2009') 


SELECT AuditFieldID,AuditValue,AuditDate 
FROM Tbl A 
WHERE TblID= 
(SELECT TOP 1 TblID 
FROM Tbl 
WHERE AuditFieldID=A.AuditFieldID 
ORDER BY AuditDate DESC 
) 
+2

SQL .... 서버를 가정? 어떤 기술을 사용하고 있는지 지정해야합니다 ... – womp

답변

1

/키와 최신 날짜를 얻을 순위 값을 얻기 위해 다시 가입 할 수 있습니다.

이 SQL 서버 2005 +

DECLARE @tbl Table (
TblID Int, 
AuditFieldID Int, 
AuditValue Int, 
AuditDate Date 
) 

INSERT INTO @tbl(TblID,AuditFieldID,AuditValue,AuditDate) VALUES(1,10,101,'1/1/2001') 
INSERT INTO @tbl(TblID,AuditFieldID,AuditValue,AuditDate) VALUES(2,10,102,'1/1/2002') 
INSERT INTO @tbl(TblID,AuditFieldID,AuditValue,AuditDate) VALUES(3,20,201,'1/1/2001') 
INSERT INTO @tbl(TblID,AuditFieldID,AuditValue,AuditDate) VALUES(4,20,202,'1/1/2009') 


;WITH cLatest AS 
(
    SELECT 
     ROW_NUMBER() OVER (PARTITION BY AuditFieldID ORDER BY AuditDate DESC) AS Ranking, 
     AuditFieldID, AuditDate 
    FROM 
     @tbl 
) 
SELECT 
    A.AuditFieldID, A.AuditValue, A.AuditDate 
FROM 
    @tbl A 
    JOIN 
    cLatest C ON A.AuditFieldID = C.AuditFieldID AND A.AuditDate = C.AuditDate 
WHERE 
    C.Ranking = 1 
+0

그는 그 멋진 장난감을 어디서 구합니까? –

1

간단한 :

SELECT 상위 1 AuditFieldID, AuditValue, AuditDate TBL FROM 위해 AuditDate에 의해 DES

+0

하지만 작동하지 않습니다. 질문마다 최신 감사 필드가 표시됩니다 – gbn

0

당신은 당신이 이미 TBL A에서 선택되는 같은 경우 문을 필요로하지 않습니다 동일한 필드에서 선택하십시오.

1

이렇게하는 방법에는 여러 가지가 있습니다. 다른 방법은 다르게 수행합니다. 나는 당신이 다양한 방법을 설명하는이 블로그를 보길 권한다. 집계

Including an Aggregated Column's Related Values

+0

예, 여기에는 5 가지 다른 방법이 있으며 매우 자세히 설명되어 있습니다 – SQLMenace