MySQL -查找每个月的同一天



我创建了一个系统,它将根据用户注册的时间每月计算数据。

我将运行每日cron作业,以抓取所有需要计算信息的用户,我想每天抓取所有用户。

如果用户都注册了2011-01-01

一个简单的查询会发现(如果昨天是句号):

SELECT `user_id` 
FROM `table` 
WHERE DAY( `date_created` ) = DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) )

如果他们在2011-03-31上注册,情况会变得更复杂

我可以使用什么查询来确保在2011-04-30上找到它们?

我猜应该是

SELECT `user_id`
FROM `table`
WHERE 
    DAY( `date_created` ) = DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) )
    OR DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) ) < DAY( `date_created` )
        AND LAST_DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) ) = DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY )

这似乎不是很有效,我也不知道它是否会工作(尽管我怀疑它会)。

有一个行之有效的方法吗?或者有更好的方法吗?

您所需要做的就是检查它是否是这个月的第一天,如果是做>=比较,否则做=比较。

WHERE IF(DAY(CURRENT_DATE()) = 1,
    DAY( `date_created` ) >= DAY(DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY )),
    DAY( `date_created` ) = DAY(DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ))
)

因此在3月1日,它将更新在28日或之后注册的用户(在非闰年)

相关内容

  • 没有找到相关文章

最新更新