我有一個用戶表和一個訂單表。表資料使用鍵user_id鏈接 。用戶有出生日期。有必要撰寫一個查詢來顯示users表中的一個隨機用戶,年齡超過 30 歲,在過去六個月中至少下過 3 個訂單。
我能夠進行查詢以按年齡進行抽樣:
SELECT Name from users WHERE(DATEDIFF(SYSDATE(), birthday_at)/365)>30;
但我不知道如何解決問題到最后
uj5u.com熱心網友回復:
- 加入訂單
- 僅獲取 30歲以上且最近 6 個月有訂單的用戶
- 按用戶分組
- 使用 have 過濾計數
- 限制為 1 而不排序(因為隨機)
- 使用 have 過濾計數
- 按用戶分組
- 僅獲取 30歲以上且最近 6 個月有訂單的用戶
SELECT usr.Name AS UserName
FROM users AS usr
JOIN orders AS ord
ON ord.user_id = usr.user_id
WHERE TIMESTAMPDIFF(YEAR, usr.birthday_at, CURDATE()) > 30
AND ord.order_date BETWEEN DATE_ADD(LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 6 1 MONTH)), INTERVAL 1 DAY)
AND LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))
GROUP BY usr.Name
HAVING COUNT(ord.order_id) >= 3
LIMIT 1
日期計算的測驗代碼
-- previous month, last day select LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))| LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) | | :---------------------------------------------- | | 2021-10-31 |
-- 6 months ago, first day select DATE_ADD(LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 6 1 MONTH)), INTERVAL 1 DAY)| DATE_ADD(LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 6 1 MONTH)), INTERVAL 1 DAY) | | :------------------------------------------------- ------------------------- | | 2021-05-01 |
-- someone's current age select TIMESTAMPDIFF(YEAR, '2005-11-28', CURDATE())| TIMESTAMPDIFF(YEAR, '2005-11-28', CURDATE()) | | -------------------------------------: | | 15 |
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/367599.html
