2010-03-12 4 views
0

시나리오에 의한 DISTINCT MAX (열 A), MAX (열 B)로 행을 선택 1, 2010 년 1 월 1 일, 'Fred', null, null
2 년 1 월 2 일 'Barney', 'Mr. 슬레이트 ', 2010년 1월 7일
3, 2010년 1월 3일,' '제목 없음', NULL, NULL

표 B
MasterID에 의해 업데이트 추가 된 날짜, 추가함으로써, 업데이트 날짜,
1 , 2010년 1월 3일 '윌', '그레이트 골라야'
2 2010년 1월 5일 1/4/2010 '베티', '디노'1/4/2010

도표 C
MasterID는, 추가 된 날짜, 추가됨으로는,
1, 2010년 1월 5일, 널 (null) '자갈', NULL,
2, 2010년 1월 6일, '뱀뱀'으로 업데이트 날짜 업데이트, 널, 널

표 D
으로 업데이트 MasterID, 일 라이트, 라이트함으로써 업데이트 날짜,
1 2010년 1월 2일 '제목 없음', 널, 널
3,1/4/

테이블 A, B, C & D가 UNION 인 경우 각 추가 레코드에 대해 최대 추가 날짜와 해당 사용자, 최대 업데이트 날짜 및 해당 사용자를 반환해야합니다. 예 :
'자갈', 'The Great Kazoo', 1/5/2010
2, 2010 년 1 월 6 일 'BamBam ', '씨. 슬레이트 ', 2010년 1월 7일
3, 1/4/2010,'윌마 ', NULL, NULL

내가 행 당 하나의 날짜/사용자와이 작업을 수행하는 방법을 알고 있지만, 두 사람과 함께 내 능력 밖입니다.
DBMS는 SQL Server 2005입니다. T-SQL 솔루션을 선호합니다. 하나 날짜/행당 사용자, 수정 날짜를 반복하여, 다음 MasterID 함께 두 개의 결과 테이블을 조인하는 것처럼 사전에

감사합니다,
데이브SQL 서버 :</p> <p>표 A <br> MasterID에 의해 업데이트 추가 된 날짜, 추가함으로써, 업데이트 날짜, <br> : 관련 컬럼

답변

0

는 마십시오.

SELECT added.MasterID, added.AddedDate, added.AddedBy, modif.UpdatedDate, modif.UpdatedBy FROM 
(
SELECT a.MasterID, a.AddedDate, b.AddedBy FROM 
(
    SELECT MasterID, Max(AddedDate) As AddedDate FROM 
    (
     SELECT * FROM TableA 
     UNION ALL 
     SELECT * FROM TableB 
     UNION ALL 
     SELECT * FROM TableC 
     UNION ALL 
     SELECT * FROM TableD 
    ) 
    GROUP BY MasterID 
) a 
JOIN 
(
     SELECT * FROM TableA 
     UNION ALL 
     SELECT * FROM TableB 
     UNION ALL 
     SELECT * FROM TableC 
     UNION ALL 
     SELECT * FROM TableD 
) b 
ON a.MasterID = b.MasterID AND a.AddedDate = b.AddedDate 
) added 
LEFT OUTER JOIN 
(
SELECT a.MasterID, a.UpdatedDate, b.UpdatedBy FROM 
(
    SELECT MasterID, Max(UpdatedDate) As UpdatedDate FROM 
    (
     SELECT * FROM TableA 
     UNION ALL 
     SELECT * FROM TableB 
     UNION ALL 
     SELECT * FROM TableC 
     UNION ALL 
     SELECT * FROM TableD 
    ) 
    GROUP BY MasterID 
) a 
JOIN 
(
     SELECT * FROM TableA 
     UNION ALL 
     SELECT * FROM TableB 
     UNION ALL 
     SELECT * FROM TableC 
     UNION ALL 
     SELECT * FROM TableD 
) b 
ON a.MasterID = b.MasterID AND a.UpdatedDate = b.UpdatedDate 
) modif 
ON added.MasterID = modif.MasterID 
+0

감사합니다. SQL Server의 경우 내부 SELECT에 대해 파생 테이블 이름을 지정해야했습니다. 데이브 SELECT added.MasterID, added.AddedDate, added.AddedBy, modif.UpdatedDate, modif.UpdatedBy FROM (SELECT a.MasterID, a.AddedDate, b.AddedBy FROM (SELECT MasterID 맥스 (AddedDate) (이 추가됨) MasterID BY GROUP) A - AddedDate로서 A1 FROM (SELECT * TableA의 UNION TableC UNION FROM TableB의 UNION ALL SELECT * FROM ALL SELECT * 상정 FROM ALL SELECT * FROM) ... – Dave