【问题标题】:MySQL Retrieve data from any previous weekMySQL 检索前一周的数据
【发布时间】:2015-02-23 02:10:27
【问题描述】:

所以,我可以执行以下操作来获取上周的数据。

select * from table where week(date)=week(curdate())-1

两周前也是如此。但是,如果数据是上一年的,这将失败。无论数据属于哪一年,我都可以使用什么查询来获取 n 周前的数据。

编辑:本周从周日上午 12 点开始,到周六晚上 11:59 结束

【问题讨论】:

标签: mysql date


【解决方案1】:

“一周”从什么时候开始?星期日?周一?与今天同一天?

假设您对最后一个选项感到满意,请执行以下操作:

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()(两次)替换为这个冗长的混乱。

【讨论】:

  • 谢谢。已编辑的问题说明该周是周日和周六之间的任何时间,无论今天发生什么。
  • 添加了如何在周日开始一周。现在我的大脑很痛。 ;)
  • 谢谢。出于某种原因,我不断收到语法错误。不知道我哪里出错了。
  • 向我们展示查询和“near '...'”错误消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2013-04-02
相关资源
最近更新 更多