2017-05-11 4 views
0

したがって、冗長なオーダーを生成したシステムをクリーンアップする必要があります。オリジナルの冗長行のみを選択

問題

ORDER ID, SERIAL, ... 
1   1 
2   1 
3   2 
4   2 
5   3 
6   3 
7   3 

のデータ、例えば上記のデータは、シリアル2と2桁、2桁のシリアル1で生成されたことを示し、3桁のシリアル3とこれが許可されていない、そこべきシリアル1つにつき1つだけです。

だから、唯一の注文を識別できるクエリが必要です。元の注文を除外するクエリが必要です。

したがって、上記のデータからの出力は次のようになります。

REDUNDANT ORDER IDS 
2 
4 
6 
7 

私は簡単に注文がGROUP BYHAVING COUNT(*) > 1を使用して重複を持っていますが、トリッキーな部分は、元の除去が付属していますかを識別することができます。

それは可能ですか?

ご協力いただきまして誠にありがとうございます。

コメントで掲示したよう
+0

トーマスは、でヒントとしてではない、私がリンクされ、質問をどのように使用できるかを実際に確認してください。私の必要とは多少違うようです。 – DarkNeuron

+0

@ThomasGあなたのMINの言葉は私にアイデアを与えました。自己結合を使って解決できると思います。私はあなたにupvoteを与えることができるので、私はそれをします。 – DarkNeuron

+0

@ThomasGそれは最も基本的なものですが、ほとんどストレッチではありません: 'my_tableから削除してください(...)' – Strawberry

答えて

1

、ここではこれを達成するための一つの方法です:

SELECT T1.ORDER_ID as redundant 
FROM thetable T1 
LEFT JOIN 
(
    SELECT SERIAL, MIN(ORDER_ID) AS firstorder 
    FROM thetable 
    GROUP BY SERIAL 
    HAVING COUNT(*) > 1 
) T2 ON T1.ORDER_ID=T2.firstorder 
WHERE T2.firstorder IS NULL 

SQL Fiddle