みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

[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をどのように書けばよいのかがわかりません。

どなたかアドバイスを頂けないでしょうか?
よろしくお願いいたします。

投稿日時 - 2009-10-07 14:06:53

QNo.5348764

困ってます

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

テーブルアクセス1回で済みます

with a as(
select id,年月1,年月2,count(*)over(partition by 年月1,年月2) co
from tbl_temp
)
select * from a where co >= 2

投稿日時 - 2009-10-07 21:40:36

お礼

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

ありがとうございました。

投稿日時 - 2009-10-08 23:43:38

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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);

投稿日時 - 2009-10-07 14:34:11

お礼

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

ありがとうございました。

投稿日時 - 2009-10-08 23:45:34

あなたにオススメの質問