2009-03-06 18 views
1

データファイルから取得した一連のデータ行を含むステージングテーブルがあります。ステージングファイルから重複を削除する

各行は、リモートシステムの行の変更を詳述しています。行は、変更が行われるたびに取得されたソース行の実質的なスナップショットです。各行には、作成および更新用のメタデータのタイムスタンプが含まれています。

私は現在、すべてのアップデートを含むこれらのデータファイルからアップデートテーブルを作成しようとしています。私は最新の "更新"タイムスタンプを持つ行だけを保持する重複キーで行を削除する方法が必要です。

キーフィールドをソートして重複を削除するようにSSISの「並べ替え」トランスフォームを使用して重複を削除することはできますが、最新のタイムスタンプを持つ行?

答えて

0

これはのCol1、Col2になどにマッチした行を削除し、最新ではありませんUpdateDateがあります: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 

を彼らは両方とも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とTEXTカラムには使用:ファイナルテーブルにステージングから移動するとき

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

SSISの並べ替え変換を使用して、複数の列でデータセットを並べ替えることができます。プライマリキー(またはIDフィールド)に続いてタイムスタンプ列を降順で並べ替えるだけです。

ソート変換の操作の詳細については、次の記事を参照してください。

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

は意味をなさない?

乾杯、ジョン

0

それだけで重複を無視する意味がありますか?

これを行う必要があります.2つではなくステージングテーブルに対して1つのクエリを発行してみませんか?

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 
関連する問題