[英]mySQL SELECT in between dates and with conditions
我正在崩潰,出於這些目的,我在SQL方面的經驗受到了一定的限制。 說我有以下兩個表:
客戶清單:
id | email
-----------------------------------
1 | mail1@mail.com
2 | mail2@mail.com
3 | mail3@mail.com
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日之前完成付款,且付款類型不限,但payment_type_id = 3。
必須在2016-03-22之后使用Payment_type_id = 3進行至少一筆付款。
查詢后需要的客戶是customer_id = 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)";
嘗試這個。
SELECT customer_id
FROM payment_log
WHERE payment_date =< '2016-03-22' AND payment_type_id != '3');
嘗試類似:
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語法,但是它應該可以為您提供所需的內容。
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
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.