【发布时间】:2015-02-23 02:10:27
【问题描述】:
所以,我可以执行以下操作来获取上周的数据。
select * from table where week(date)=week(curdate())-1
两周前也是如此。但是,如果数据是上一年的,这将失败。无论数据属于哪一年,我都可以使用什么查询来获取 n 周前的数据。
编辑:本周从周日上午 12 点开始,到周六晚上 11:59 结束
【问题讨论】:
所以,我可以执行以下操作来获取上周的数据。
select * from table where week(date)=week(curdate())-1
两周前也是如此。但是,如果数据是上一年的,这将失败。无论数据属于哪一年,我都可以使用什么查询来获取 n 周前的数据。
编辑:本周从周日上午 12 点开始,到周六晚上 11:59 结束
【问题讨论】:
“一周”从什么时候开始?星期日?周一?与今天同一天?
假设您对最后一个选项感到满意,请执行以下操作:
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()(两次)替换为这个冗长的混乱。
【讨论】: