现在我有一个问题可以获取过去7天的参赛作品
AND entries.created > DATE_SUB(NOW(), INTERVAL 1 WEEK) GROUP BY entries.id ORDER BY count DESC"
但我希望它可以是当前的一周,所以它会在每个星期一重置。
我如何制定这样的问题?
答案 0 :(得分:0)
首先,您可以使用编程语言获得当前星期一的时间。例如在php
中$start = date('Y-m-d',strtotime('last monday'));
然后你可以像这样在sql中注入值: entries.created> $ {start} // 2016-11-14例如。
答案 1 :(得分:0)
要在MySQL中完全执行此操作,您需要一种方法来从任何特定DATETIME
或TIMESTAMP
值获取一周的第一天。将其视为截断到最后一个星期日或截断到最后一个星期一的功能。
truncate-to-last-Sunday看起来像这样:
FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -1, 7))
truncate-to-last-Monday看起来像这样(注意 -2 )
FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -2, 7))
(根据您当地的业务规则选择星期日或星期一,将其中的某一天视为第一天。)
然后,您的WHERE
子句将包含以下内容:
AND entries.created >= FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -1, 7))
有人希望MySQL有一个TRUNCATE_TO_WEEK(datestamp,locality)
功能。但事实并非如此。
如果你想按日历周总结你的桌子,你需要这样的东西。
SELECT
FROM_DAYS(TO_DAYS(entries.created) -MOD(TO_DAYS(entries.created) -1, 7)) week_begins,
COUNT(*) entries_count
FROM
entries
GROUP BY FROM_DAYS(TO_DAYS(entries.created) -MOD(TO_DAYS(entries.created) -1, 7))
ORDER BY 1
以下是对这一点的更全面的解释,包括一些方便的存储函数。
http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/