- ベストアンサー
重複しているデータを取得したい
[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をどのように書けばよいのかがわかりません。 どなたかアドバイスを頂けないでしょうか? よろしくお願いいたします。
- みんなの回答 (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
その他の回答 (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);
お礼
existsという発想がでてきませんでした。 こちらの回答をみて、なるほど~と思い、欲しいデータが取得できるのを確認させて頂きました。 ありがとうございました。
お礼
with句というものの使い方をはじめて知りました。 大変参考になりました。 ありがとうございました。