2012-02-11 11 views
0

この質問はわずか1分前の私のものです。私は1つのテーブルに重複レコードを探しています。私は一致するフィールド "シンボル"と "TradeDate"を探しています。私はテーブルの一意のIDフィールドを持っています。私のロジックは:最小のID値ではないIDフィールドを持つレコードを返します。そのIDフィールドは、そのシンボルと日付の組み合わせに対して1以上のカウントを持ちます。あなたの次の質問が起こっている場合重複を見つけるためのSQLサブクエリ

SELECT Symbol , ID FROM tblDailyPricingAndVol 
    WHERE (SELECT Count(TradeDate) FROM tblDailyPricingAndVol AS T2 
      WHERE T2.Symbol = Symbol AND T2.TradeDate = TradeDate GROUP BY Symbol) > 1 
      AND ID <> (SELECT MIN(ID) FROM tblDailyPricingAndVol AS T3 
       WHERE T3.Symbol = Symbol AND T3.TradeDate = TradeDate 
      GROUP BY Symbol) 

答えて

2
;WITH x AS 
(
    SELECT ID, TradeDate, Symbol, 
    rn = ROW_NUMBER() OVER (PARTITION BY TradeDate, Symbol ORDER BY ID) 
    FROM dbo.tblDailyPricingAndVol 
) 
SELECT ID, TradeDate, Symbol, rn 
FROM x WHERE rn > 1 
ORDER BY TradeDate, Symbol; 

:ここで私はそれを実行するまで、SQL Serverはそれについて文句はありません...私が持っているものだ、それは私のサブクエリが複数の値を返していると言います「今複製したいものを削除したい」というのは、簡単な変更で問題を解決できるようにすることです。

+0

ありがとうございました。あなたの投稿に基づいて私のロジックの説明を編集しました...私は最小のIDをすべて返したいと思います。私はこれを動作させると、削除ステートメントに変更されます。単純な選択/サブクエリでこれを行う方法はありますか? (PARTITIONに慣れていない)。私はいずれかのサブクエリが複数の値を返すことができ、それぞれが集計関数であることを考えています。 – StatsViaCsh

+0

私はあなたを先取りしたようです。 PSサブクエリには 'GROUP BY Symbol'しかありません。 –

+0

私はちょうどそれをキャッチしました...私は "GROUP BY Symbol、TradeDate"に変更しました。 – StatsViaCsh

関連する問題