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

下記のテーブルがあったとします。

【t_tblテーブル】
―――――――――――――
|id1  |id2 |id3  |
―――――――――――――
|1   |1  |10   |
|1   |2  |12   |
|1   |3  |9   |
|1   |4  |8   |
|1   |5  |14   |
|2   |1  |14   |
|2   |2  |8   |
|2   |3  |9   |
|2   |4  |12   |
|2   |5  |10   |
|3   |1  |4   |
|3   |2  |2   |
|3   |3  |3   |
|3   |4  |5   |
|3   |5  |6   |
|4   |1  |6   |
|4   |2  |5   |
|4   |3  |3   |
|4   |4  |2   |
|4   |5  |4   |
―――――――――――――


このテーブルの特定のレコードを抽出する為に、
2つパラメータを渡すとします。

1. 12
2. 8


そして下記の条件を満たすレコードのid1を抽出したいと思います。

1. 「id3」 = 「12」 かつ 「id3」 = 「8」 を満たすid1
(※この時点で1と2がヒットします)
2. 条件1を満たした上で、「12」のid2 < 「8」のid2
(※この時点で1のみヒットします)


下記のSQLで条件1を満たせる事は確認しましたが、
条件2を満たす方法が分かりませんでしたので、
アドバイスいただける方がいらっしゃいましたら、
ご教示いただきたいと思います。

select id1
from t_tbl
group by id1
Having SUM(CASE WHEN id3=12 Then 1 Else 0 End)>0
And SUM(CASE WHEN id3=8 Then 1 Else 0 End)>0


使用バージョンは7.4.19です。
よろしくお願いします。

A 回答 (1件)

読みにくいですけどこれで求められるようです。


試したのは8.3.5 ですが、たぶん7.4でもいけるはず。

select tbl.id1 from
((select id1 as id,id2 as id2_0 from t_tbl where id3 = 12) as t12
left outer join
(select id1,id2 from t_tbl where id3 = 8) as t8
on (t12.id=t8.id1)) as tbl
where tbl.id2_0 < tbl.id2;
    • good
    • 0
この回答へのお礼

ご教示いただいた記述を試させて頂いた所、意図した動作となりました。
書いてある内容も何となくですが理解できたと思います。
どうもありがとうございました。

お礼日時:2009/01/17 00:00

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