[英]mysql filter and match data INTERVAL 30 day
我正在嘗試獲取在 30 天內沒有任何新交易類型deposit
的customer
的數據
例如:客戶 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.