前提・実現したいこと
対象条件のSQL文が分からないためご助力いただけますでしょうか。
抽出したい条件は以下です。
・detailsにAAAをもつsubscriptionのstatusがACTIVEなuser
かつ
・detailsにAAAをもつsubscription以外は、全てstatusがCLOSEDである(もしくは存在しない)user
AAAのsubscriptionがACTIVEであっても、そのuserのdetailsがAAAでないACTIVEなsubscriptionを持っている場合は、対象外としたいです。
以下のテーブルの例ですと、user_idが3と6のuserを抽出したいと思っています。
対象のテーブル
テーブル名:subscriptions
id | subscription_id | user_id | status | details |
---|---|---|---|---|
1 | 1 | 1 | ACTIVE | bronze |
2 | 2 | 2 | ACTIVE | AAA |
3 | 3 | 2 | ACTIVE | silver |
4 | 4 | 3 | ACTIVE | AAA |
5 | 5 | 3 | CLOSED | silver |
6 | 6 | 4 | CLOSED | AAA |
7 | 7 | 5 | CLOSED | AAA |
8 | 8 | 5 | ACTIVE | gold |
9 | 9 | 5 | CLOSED | bronze |
10 | 10 | 6 | ACTIVE | AAA |
試したこと
以下SQLを実行しましたが、うまくいきませんでした。
SELECT * FROM subscriptions as s1 INNER JOIN subscriptions as s2 ON s1.user_id not in (s2.user_id) AND s1.status = 'ACTIVE' AND s1.details like 'AAA' AND s2.status = 'ACTIVE' AND s2.details not like 'AAA'
SELECT * FROM subscriptions as s1 INNER JOIN subscriptions as s2 ON s1.user_id <> s2.user_id AND s1.status = 'ACTIVE' AND s1.details like 'AAA' AND s2.status = 'ACTIVE' AND s2.details not like 'AAA'
補足情報(FW/ツールのバージョンなど)
PostgreSQL
回答2件
あなたの回答
tips
プレビュー