質問
データファイルから取得したwhoの一連のデータ行を含むステージングテーブルがあります。
各行は、リモートシステムの行に対する変更の詳細を示します。行は、変更のたびに取得されたソース行のスナップショットです。各行には、作成および更新用のメタデータのタイムスタンプが含まれています。
現在、すべての更新を含むこれらのデータファイルから更新テーブルを構築しようとしています。重複キーを持つ行を削除して、最新の「更新」行のみを保持する方法が必要です。タイムスタンプ。
SSIS" sort"を使用できることは承知しています。キーフィールドでソートして重複を削除するように指示することにより、重複を削除するように変換しますが、保持する行が最新のタイムスタンプを持つ行であることを確認するにはどうすればよいですか?
解決
これにより、Col1、Col2などに一致する行が削除され、最新でないUpdateDateが設定されます。
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))
...
編集:ケース IN に敏感なデータベースで大文字と小文字を区別するテストを行う必要がある場合は、VARCHARおよびTEXT列で次を使用します。
ON (T.Col1 = D.Col1 COLLATE Latin1_General_BIN
OR (T.Col1 IS NULL AND D.Col1 IS NULL))
...
他のヒント
SSISの並べ替え変換を使用して、データセットを複数の列で並べ替えることができます。主キー(またはIDフィールド)に続いて、タイムスタンプ列を降順に並べ替えるだけです。
並べ替え変換の操作の詳細については、次の記事を参照してください
http://msdn.microsoft.com/en-us/library /ms140182.aspx
理にかなっていますか
乾杯、ジョン
ステージングからファイナルテーブルに移動するときに、重複を単に無視することは理にかなっていますか?
とにかくこれを行う必要があるので、ステージングテーブルに対して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