因此,我可以执行以下操作来获取上周的数据。
select * from table where week(date)=week(curdate())-1
2个星期前相同。但如果数据是在上一年,这将失败。无论数据属于哪一年,我都可以使用什么查询来获取n周前的数据。
编辑:本周从周日上午12点开始,到周六晚上11:59结束
答案 0 :(得分:0)
什么时候"周"开始?星期日?星期一?与今天同一天?
假设您对最后一个选项感到满意,请执行以下操作:
SELECT ...
WHERE date >= CURDATE() - INTERVAL $n WEEK
AND date < CURDATE() - INTERVAL $n-1 WEEK
实施例
mysql> SELECT CURDATE(), CURDATE() - INTERVAL 9 WEEK, CURDATE() - INTERVAL 9-1 WEEK;
+------------+-----------------------------+-------------------------------+
| CURDATE() | CURDATE() - INTERVAL 9 WEEK | CURDATE() - INTERVAL 9-1 WEEK |
+------------+-----------------------------+-------------------------------+
| 2015-02-22 | 2014-12-21 | 2014-12-28 |
+------------+-----------------------------+-------------------------------+
如果你需要在特定的DOW上开始一周,那么通过进一步减去INTERVAL DAYOFWEEK(CURDATE()) DAY
,查询会更加混乱。这可能会有所不同。
本周开始(假设是星期日)是CURDATE() - INTERVAL (WEEKDAY(CURDATE() + INTERVAL 1 DAY))
。所以,用这个长时间的混乱替换上面表达式中的CURDATE()
(两次)。