Php MySQL选择特定周/月最后2天的条目

Php MySQL选择特定周/月最后2天的条目,php,mysql,sql,date,Php,Mysql,Sql,Date,我有两列,“创建时间”是指帐户注册的时间,“最后一次播放”是指帐户上次登录的时间。我想选择在特定周/月内注册并在该特定周/月的最后2天内处于活动状态的帐户 以下是我如何选择上周的所有参赛作品而不考虑最后一场比赛(作品): 这是我上周的当前查询,但不起作用: SELECT COUNT(id) FROM account.account WHERE WEEKOFYEAR(create_time) = WEEKOFYEAR(NOW()) - 1 AND YEAR(create_time) = YEA

我有两列,“创建时间”是指帐户注册的时间,“最后一次播放”是指帐户上次登录的时间。我想选择在特定周/月内注册并在该特定周/月的最后2天内处于活动状态的帐户

以下是我如何选择上周的所有参赛作品而不考虑最后一场比赛(作品):

这是我上周的当前查询,但不起作用:

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
这将为您提供在他们注册的同一周的周六或周日活动的条目

编辑:对于几个月,您基本上做相同的事情,但将
替换为
替换为
。通过检查所有可能的情况,您可以手动查找给定月份的最后两天:

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))

不要介意闰年;-)。或者您自己手动重新合并。

我回答时,您似乎进行了编辑。您能解释一下“我想选择在特定周/月内注册并在该周/月的最后两天内处于活动状态的帐户”是什么意思吗?您是指该周的周六和周日吗?我刚刚编辑了我的问题,以使代码更具可读性。是的,我是指那个星期的星期六和星期日。我现在将测试您的查询
last\u play>=DATE\u SUB(NOW(),INTERVAL 2 DAY)
从现在开始2天,但我想查看该周的最后2天。谢谢,这正是我需要的!我仍然需要在几个月内找到一个解决方案,你不知道哪一周是最后两天。
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))