SELECT COUNT(*) FROM `table` WHERE `datetime` > SUBDATE(NOW(), INTERVAL 1 DAY)
这将获得最后一天的条目数。但是,它可能获得多个间隔的条目数量,而不必发送这个查询多次的变化(INTERVAL 1 DAY
,INTERVAL 1 WEEK
,INTERVAL 1 MONTH
,...)?
您需要CASE WHEN
表达才能做到这一点。
SELECT
COUNT(CASE WHEN DATE(`datetime`) >= CURDATE() - INTERVAL 1 DAY AND DATE(`datetime`) < CURDATE() THEN 1 END) AS lastDay,
COUNT(CASE WHEN DATE(`datetime`) >= CURDATE() - INTERVAL 7 DAY AND DATE(`datetime`) < CURDATE() THEN 1 END ) AS lastSevenDays,
COUNT(*) AS lastThirtyDays
FROM `table`
WHERE
DATE(`datetime`) >= CURDATE() - INTERVAL 30 DAY
注意:如果您的要求是获取过去一天,过去7天和过去30天的结果,则请执行此查询。
编辑:
如果您在datetime
字段上有索引,则以上查询将无法使用该索引。请使用下面给出的查询,以利用上的索引datetime
。
SELECT
COUNT(CASE WHEN DATE(`datetime`) >= CURDATE() - INTERVAL 1 DAY AND DATE(`datetime`) < CURDATE() THEN 1 END) AS lastDay,
COUNT(CASE WHEN DATE(`datetime`) >= CURDATE() - INTERVAL 7 DAY AND DATE(`datetime`) < CURDATE() THEN 1 END ) AS lastSevenDays,
COUNT(*) AS lastThirtyDays
FROM `table`
WHERE
`datetime` >= (NOW() - INTERVAL 30 DAY - INTERVAL HOUR(NOW()) HOUR - INTERVAL MINUTE(NOW()) MINUTE - INTERVAL SECOND(NOW()) SECOND)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句