アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

A 回答 (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
    • good
    • 5
この回答へのお礼

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

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

お礼日時:2009/10/08 23:43

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);
    • good
    • 3
この回答へのお礼

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

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

お礼日時:2009/10/08 23:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!