• ベストアンサー

重複しているデータを取得したい

[TBL_TEMP] ID 年月1  年月2 項目A  項目B -------------------------------------------- 1 200909 200910 aaaa bbbb 2 200807 200809 aaaa bbbb 3 200909 200910 aaaa bbbb 4 200909 200909 aaaa bbbb 5 200807 200809 aaaa bbbb 上記のようなデータがあり、年月1と年月2でグルーピングして、重複しているデータを抽出する場合は、以下のSQLでデータを取得できます。 SELECT MIN(ID),年月1,年月2 FROM TBL_TEMP GROUP BY 年月1,年月2 HAVING COUNT(1) >= 2 上記のSQLの場合、重複データの中でIDが一番小さいもののみが取得されるため、ID=1、2の2データが取得できます。 これを重複データ全件、つまり、ID=1,2,3,5のデータを取得するには、SQLをどのように書けばよいのかがわかりません。 どなたかアドバイスを頂けないでしょうか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

テーブルアクセス1回で済みます with a as( select id,年月1,年月2,count(*)over(partition by 年月1,年月2) co from tbl_temp ) select * from a where co >= 2

kou-_-kou
質問者

お礼

with句というものの使い方をはじめて知りました。 大変参考になりました。 ありがとうございました。

その他の回答 (1)

noname#246547
noname#246547
回答No.1

select * from tbl_temp a where exists ( select * from tbl_temp b where b.id <> a.id and a.年月1 = b.年月1 and a.年月2 = b.年月2);

kou-_-kou
質問者

お礼

existsという発想がでてきませんでした。 こちらの回答をみて、なるほど~と思い、欲しいデータが取得できるのを確認させて頂きました。 ありがとうございました。