私は顧客ごとに複数の行を持つテーブルとvisit_dateを持っています。訪問日はnullでもかまいません。最大値でMySQLテーブルから行を選択する方法
私のテーブルは以下の通りです:
のお客様:
id | name | email
1 | John Doe1 | [email protected]
2 | John Doe2 | [email protected]
3 | John Doe3 | [email protected]
store_customers
id | customer_id | store_id | email_optedin | visit_date
1 | 1 | 1 | 1 | 2015-11-30
2 | 1 | 2 | 1 | 2016-05-08
3 | 1 | 3 | 1 | null
4 | 2 | 1 | 1 | 2015-04-30
5 | 2 | 2 | 1 | 2015-08-40
6 | 2 | 3 | 1 | 2015-12-12
7 | 3 | 1 | 1 | null
8 | 3 | 2 | 1 | null
9 | 3 | 3 | 1 | null
私はどちらかが3のいずれかに訪問を持っていなかった顧客を取得しようとしています指定された日付以来訪問していない(例えば、2016-04-15)。
私は期待してい顧客2と3が、私はこのクエリを試していない1.
は:
select distinct * from customers
inner join store_customers on store_customers.customer_id = customers.id
where customers.email != '' and
store_customer.store_id in (1,2,3) and customers.emailStatus not in ('Unverified','Bounced','Spammed')
and
(
store_customer.email_optedin = 1
and max(store_customers.visit_date) <= '2016-04-15'
or account_customer.visit_date is null
);
これは動作しません。私は何らかの形で店頭IDのセットを取得する必要があります)、訪問しなかった(指定された店舗の訪問日にはすべてnull)か、訪問日が1つ以上あるかどうかを確認してから、最大指定された日付までの日付。
似たような質問がありましたが、答えが見つからなかったお客様や、少なくとも1人ではないお客様を選択してから、最新の訪問日を結合されたテーブルに格納されます。
私はこれをすべて1つのクエリで実行しようとしていますが、それが不可能な場合は、それを分解することもできます。また、このクエリには他にも多くのものが追加されており、結合の順序を変更することが問題になる可能性があるため、結合の順序を変更する必要はありません。
本当にありがとうございました。
よろしく、
Waqar
を試してみてください私は、クエリは、顧客2と3 –
を返すことを期待することを言及するのを忘れてしまった "またはaccount_customer.visit_dateはnullです" :そのテーブルはJOINの一部ではありません... – Webomatik
申し訳ありません。 account_customerはタイプミスです。 store_customersである必要があります。 store_customerテーブルから、私はrow_6(customer_id2の場合)と7,8,9,9の行のうちの1つが同じcustomer_id(3)なので、期待しています。 –