2016-11-17 16 views
1

毎月クエリを実行し、外部ソースが取得するためにテーブルにアップロードされるデータを生成するロスタを受け取ります。私の質問は、すべてのデータが複製されているわけではないことと、新しい人物に登場しない人がいれば、その前の月を残す必要があるということを念頭に置き、前回のアップロードから重複データを削除する最も簡単な方法です。データはアップロードされるとタイムスタンプが付きます。 T-SQLはデータをインポートし、前月から重複レコードを削除します

はありがとう

あなたが以内にしてパーティションを見て、注文することで、ハードを取る、あなたのデータ構造を見ることなくdupes

;with cte as (
    Select * 
      ,RN = Row_Number() over (Partition By SomeKeyField(s) Order By SomeDate Desc) 
    From YourTable 
) 
Select *  -- << Remove if Satisfied 
-- Delete  -- << Remove Comment if Statisfied 
From cte 
Where RN>1 

を識別して削除するには、CTEとROW_NUMBER()を使用することができます

答えて

1

Row_Number()のOVER句

+0

ありがとう、私はこれが動作すると思います。 –

+0

@ Leigh.Pageお手伝いをします。あなたがPartition ByとOrder Byが正しいことを確認してから、DELETE –

+0

@ Leigh.Pageでトリガーを引くだけです。>>>ここでRN> 1 <<<< ...元々はタイプミスRN = 1 –

0

簡潔で効果的な方法は、派生テーブルを使用して削除します。

しかし、最も効果的なやり方は、重複を入力に取り除き、それらを防ぐことです(たとえば、一意性制約など)。

+0

しかし、削除される複製は、すでにテーブルに存在するものになります。最新のタイムスタンプを持つ新しいバージョンがそれを置き換えます。 –

+0

したがって、列単位でいくつかの注文を追加してください。 – Deadsheep39

+0

OKクール、良いアイデア。ご協力いただきありがとうございます。 –

関連する問題