簡體   English   中英

MySQL選擇特定周/月的最近2天的條目

[英]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通過MONTHWEEKDAY通過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.

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