문제

데이터 파일에서 가져온 곳에있는 WHO 일련의 데이터 행이 포함 된 스테이징 테이블이 있습니다.

각 행은 원격 시스템에서 행으로 변경되는 것을 자세히 설명하며 행은 모든 변경 후에 취한 소스 행의 스냅 샷입니다. 각 행에는 생성 및 업데이트를위한 메타 데이터 타임 스탬프가 포함되어 있습니다.

이제 모든 업데이트가 포함 된 이러한 데이터 파일에서 업데이트 테이블을 작성하려고합니다. 최신 "업데이트"타임 스탬프로 행만 유지하는 중복 키로 행을 제거하는 방법이 필요합니다.

키 필드를 정렬하고 중복을 제거하라고 지시하여 SSIS "Sort"변환을 사용하여 복제를 제거 할 수 있지만, 유지하는 행이 최신 타임 스탬프가있는 것인지 확인하는 방법은 무엇입니까?

도움이 되었습니까?

해결책

COL1, COL2 등에서 일치하는 행을 제거하고 최신이 아닌 업데이트가 있습니다.

DELETE D
FROM   MyTable AS D
       JOIN MyTable AS T
           ON T.Col1 = D.Col1
          AND T.Col2 = D.Col2
          ...
          AND T.UpdateDate > D.UpdateDate

col1과 col2가 모두 null이라면 "일치"로 간주되어야한다면 사용해야합니다.

       ON (T.Col1 = D.Col1 OR (T.Col1 IS NULL AND D.Col1 IS NULL))
      AND (T.Col2 = D.Col2 OR (T.Col2 IS NULL AND D.Col2 IS NULL))
      ...

편집하다: 사례에 대해 사례 민감한 테스트를 해야하는 경우 그런 다음 Varchar 및 텍스트 열에서 민감한 데이터베이스를 사용합니다.

       ON (T.Col1 = D.Col1  COLLATE Latin1_General_BIN 
           OR (T.Col1 IS NULL AND D.Col1 IS NULL))
       ...

다른 팁

SSI의 정렬 변환을 사용하여 데이터 세트를 둘 이상의 열로 정렬 할 수 있습니다. 기본 키 (또는 ID 필드)에 따라 타임 스탬프 열을 내림차순으로 정렬하십시오.

정렬 변환 작업에 대한 자세한 내용은 다음 기사를 참조하십시오.

http://msdn.microsoft.com/en-us/library/ms140182.aspx

이해가 되나요?

건배, 존

스테이징에서 최종 테이블로 이동할 때 중복을 무시하는 것이 합리적입니까?

어쨌든이 작업을 수행해야하므로 2 개가 아닌 스테이징 테이블에 대해 하나의 쿼리를 발행하지 않겠습니까?

INSERT final
    (key, col1, col2)
SELECT
    key, col1, col2
FROM
    staging s
    JOIN
    (SELECT key, MAX(datetimestamp) maxdt FROM staging ms ON s.key = ms.key AND s.datetimestamp = ms.maxdt
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top