2016-04-28 6 views
0

私は溶け込みがあり、SQLの経験は何らかの形で制限されています。私は2つの以下のテーブルを持っていると言う:日付と条件との間のmySQL SELECT

customer_list:

id | email 
----------------------------------- 
1  | [email protected] 
2  | [email protected] 
3  | [email protected] 

payment_log

customer_id | payment_date | payment_type_id 
------------------------------------------------------------- 
1    | 2016-01-01  | 3 
1    | 2016-01-05  | 3 
1    | 2016-01-02  | 2 
1    | 2016-04-01  | 1 
1    | 2016-04-12  | 2 
2    | 2016-01-13  | 1 
2    | 2016-01-19  | 1 
2    | 2016-01-07  | 1 
2    | 2016-01-04  | 1 
3    | 2016-04-15  | 2 

私は次の基準に住んこの例では必見を選択するために、ご希望のお客様:

  • 2016-03-22より前にお支払いが行われている必要があります。お支払い方法は、お支払い方法を除くpe_id = 3

  • はpayment_type_id = 3私は、クエリの結果として必要な顧客はCUSTOMER_IDさ

= 1を使用して、2016年3月22日の後に少なくとも1回の支払いを行っている必要があります。

+0

に参加しますか? –

+0

SELECT customer_id FROM payment_log WHERE(payment_date <'2016-03-22 AND_type_type_id!= 3)OR(payment_date> 2016-03-22 AND payment_type_id = 3) "; –

+0

両方の条件が必要です:) – EibergDK

答えて

0
SELECT * FROM customer 
WHERE id IN (
    SELECT DISTINCT L1.customer_id AS id 
    FROM payment_log L1 
    LEFT JOIN payment_log L2 ON L1.customer_id = L2.customer_id 
    WHERE 
     L1.payment_date < '2016-03-22' 
    AND L2.payment_date > '2016-03-22' AND L2.payment_type_id = 3 
) 
0

お試しください。

SELECT customer_id 
FROM payment_log 
WHERE payment_date =< '2016-03-22' AND payment_type_id != '3'); 
+0

これは1つの条件 – Matt

0

ような何か試してみてください:あなたは、SQL構文を少しマッサージする必要がある場合があります

SELECT 
    DISTINCT customer_id 
FROM 
    payment_log 
WHERE 
    (payment_date < '2016-03-22' AND payment_type_id != 3) 
    AND 
    customer_id IN (SELECT DISTINCT customer_id FROM payment_log WHERE payment_date > 2016-03-22 AND payment_type_id = 3); 

を、それはあなたが必要なものを与える必要があります。私はあなたが内部を使うべきだと思う

1

はあなたがいずれか一つの条件の権利を満たすために必要がある同じテーブルに

SELECT distinct a.customer_id FROM payment_log as a 
INNER JOIN payment_log as b 
     on (a.customer_id = b.customer_id and a.payment_date = b.payment_date) 
WHERE (a.payment_date < '2016-03-22' AND a.payment_type_id!=3) 
AND (b.payment_date>2016-03-22 AND b.payment_type_id=3)";