簡體   English   中英

mysql 過濾匹配數據 INTERVAL 30 天

[英]mysql filter and match data INTERVAL 30 day

在此處輸入圖像描述

我正在嘗試獲取在 30 天內沒有任何新交易類型depositcustomer的數據

例如:客戶 MS00001 不會被查詢,因為它在 30 天內仍有新的deposit記錄,結果應該只顯示我 MS00002,因為它在 30 天內沒有deposit和類型

在此處輸入圖像描述

同時我有一個客戶表,其中包含客戶詳細信息。

那么我如何使用 1 個查詢來解決所有這些問題

目標output:交易表+30天內沒有新記錄的客戶表

下面是我試圖獲取在交易表中沒有任何新記錄的客戶的查詢。

SELECT t1.* 
    FROM transaction t1
LEFT JOIN (
    SELECT customer FROM transaction 
    WHERE date <= DATE_SUB(SYSDATE(), INTERVAL 30 DAY)
) t2 ON t2customer = t1.customer
WHERE t1.date <= DATE_SUB(SYSDATE(), INTERVAL 30 DAY)
AND t1.type = 'deposit'
AND t2.customer  IS NULL
ORDER BY trans_id DESC

答案取決於您想從事務表中看到的內容。 使用一個查詢執行此操作的最簡單方法是按客戶分組交易,然后按 select 客戶(其最后一次存款是在 30 天前進行的)分組。 通過這種方式,您可以在 select 中查看他們最近的交易詳情

SELECT transaction.*, customer.*
FROM transaction
JOIN customer
    ON customer.id = transaction.customer_id
WHERE transaction.type = "deposit"
GROUP BY customer.id
HAVING MAX(transaction.date) <= DATE_SUB(SYSDATE(), INTERVAL 30 DAY)

感謝 maksa 給了我解決這個問題的想法。

下面的 SQL 得到我想要的結果。

SELECT *
FROM transaction
JOIN customers
    ON customers.username = transaction.customer
WHERE transaction.type = "deposit"
GROUP BY customers.username, transaction.customer
HAVING MAX(transaction.date) <= DATE_SUB(SYSDATE(), INTERVAL 30 DAY)

如果您收到任何聚合問題,在我的情況下: phpmyadmin go 到變量 => sql 模式

編輯 sql 模式變量並從值中刪除 ONLY_FULL_GROUP_BY 文本,然后保存。

或遵循: https://stackoverflow.com/a/51629259/14176904

在此處輸入圖像描述

最后,再次感謝 maksa

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM