[英]MySQL Select entries from last 2 days of specific week / month
我有2列,'create_time'表示帳戶已注冊,'last_play'表示帳戶最后一次登錄。 我想選擇在特定周/月內注冊並且在此特定周/月的最后2天內有效的帳戶。
以下是我如何在不考慮last_play(工作)的情況下選擇上周的所有條目:
SELECT COUNT(id) FROM account.account
WHERE WEEKOFYEAR(create_time) = WEEKOFYEAR(NOW()) - 1
AND YEAR(create_time) = YEAR(NOW());
這是我上周的當前查詢,它不起作用:
SELECT COUNT(id) FROM account.account
WHERE WEEKOFYEAR(create_time) = WEEKOFYEAR(NOW()) - 1
AND YEAR(create_time) = YEAR(NOW())
AND DATE(last_play) BETWEEN
ADDDATE(DATE(DATE_SUB(NOW(), INTERVAL 1 WEEK)),
INTERVAL 1 - DAYOFWEEK(DATE(NOW())) DAY)
AND DATE(NOW());
基於您的第一個工作查詢,您可以使用MySQL函數WEEKDAY
來識別星期六和星期日:
SELECT COUNT(id) FROM account.account
WHERE WEEKOFYEAR(create_time) = WEEKOFYEAR(NOW()) - 1
AND YEAR(create_time) = YEAR(NOW())
AND WEEKOFYEAR(last_play) = WEEKOFYEAR(create_time) //last_play is in the same week as create_time
AND WEEKDAY(last_play) IN (5,6); //wekkday is saturday or sunday
這將為您提供在他們注冊的同一周的星期六或星期日活動的條目。
編輯:幾個月來,你基本上做同樣的事情,但更換WEEKOFYEAR
通過MONTH
和WEEKDAY
通過DAYOFMONTH
。 在給定月份的最后兩天,您可以通過為所有可能的案例進行拼貼手動找到:
SELECT COUNT(id) FROM account.account
WHERE MONTH(create_time) = MONTH(NOW()) - 1
AND YEAR(create_time) = YEAR(NOW())
AND MONTH(last_play) = MONTH(create_time) //last_play is in the same MONTH as create_time
AND
(DAYOFMONTH(last_play) IN (30,31) AND MONTH(last_play) IN (1,3,5,7,8,10,12)
OR DAYOFMONTH(last_play) IN (29,30) AND MONTH(last_play) IN (4,6,9,11)
OR DAYOFMONTH(last_play) IN (27,28) AND MONTH(last_play) IN (2))
沒關系閏年;-)。 或者自己手動再次合並。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.