2016-04-28 51 views
0

爲了這些目的,我正在融化並且我的SQL體驗受到某種程度的限制。說我有以下兩個表: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年3月22日之前付款,付款類型爲EXCEPT payment_ty pe_id = 3

  • 必須取得至少一個支付2016年3月22日之後,使用payment_type_id = 3

我需要作爲查詢的結果,客戶CUSTOMER_ID = 1。

+0

您需要滿足任何一個條件合適的內連接? –

+0

嘗試此查詢「SELECT customer_id FROM payment_log WHERE(payment_date <'2016-03-22'AND payment_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

這隻會滿足一個條件 – Matt

0

試着這麼做:

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); 

您可能需要按摩SQL語法一點,但它應該給你你需要什麼。

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)"; 
相關問題