【问题标题】:SQL get data between the last four weeksSQL 获取最近四个星期之间的数据
【发布时间】:2018-07-03 14:56:57
【问题描述】:

我想获取过去 4 周的数据。现在,我通常在星期二运行查询,因此我有以下代码:

AND datatime between dateadd(day,-30,getdate()) and dateadd(day,-2,getdate())

我想随时运行查询(不仅仅是在星期二),还想获取同一时期的数据(从星期一到星期日的最后四个星期)。

我尝试过以下操作

AND datatime between dateadd(week,-4,getdate()) and dateadd(week,-1,getdate())

但它不起作用,因为获得的数据不是来自前几周(周一到周日),而是来自我运行它之前的 7 天。

关于如何使用该结构获取数据的任何想法,以便无论我何时运行查询都可以获取前 4 周(周一至周日)的数据?

P.S 我正在使用 DBeaver。 谢谢。

【问题讨论】:

  • 标记您正在使用的 dbms。该查询是特定于产品的。
  • 我正在使用 DBeaver

标签: sql date dbeaver


【解决方案1】:

如果你想要过去 4 周的第一个星期一到今天的所有数据,你可以使用这个:

AND datatime >= DATE_ADD(
         DATE_ADD(CURDATE(), INTERVAL - WEEKDAY(CURDATE()) DAY),
         INTERVAL - 4 WEEK)

但是,如果你想要从过去 4 周的第一个星期一到最后一个星期日的所有数据,你可以使用这个:

AND datatime >= DATE_ADD(
         DATE_ADD(CURDATE(), INTERVAL - WEEKDAY(CURDATE()) DAY),
         INTERVAL - 4 WEEK)
AND datatime < DATE_SUB(
         DATE(NOW()), INTERVAL DAYOFWEEK(NOW())-2 DAY)

发生了什么:

您可以找到Date and Time Functions Here。在这个查询中,我们使用:

  1. DATE_ADD(start, Interval) :将时间值(Interval)添加到日期值(start),
  2. DATE_SUB(end, Interval) :从日期(结束)中减去时间值(间隔),
  3. CURDATE() : 返回当前日期,
  4. WEEKDAY(date) :返回日期的工作日索引(0 = 星期一,1 = 星期二,... 6 = 星期日),
  5. DAYOFWEEK(date) :返回日期的工作日索引(1 = 星期日,2 = 星期一,...,7 = 星期六)

所以:

DATE_ADD(
      DATE_ADD(----------------------------------------------------------
             CURDATE(),                                                 |
             INTERVAL - WEEKDAY(CURDATE()) DAY //<== Return Today Index |-> Will Return the date of this week's monday : (25-01-2018 - 3 DAY) = 22-01-2018
                                               (WEEKDAY(25-01-2018) = 3)|
      ),-----------------------------------------------------------------
      INTERVAL - 4 WEEK //<== Will go 4 weeks back and start from monday
)

一个工作案例Scenario。

【讨论】:

  • 那里有错误吗?我不理解“WEEKDAY(CURDATE()) DAY)”的语法
  • @Pabs88,嘿,抱歉这么晚了!我已经编辑了答案,希望对您有所帮助。
  • 谢谢,但它显示“无效操作:在“DAY”或附近出现语法错误。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多