我想获得过去四周的数据。现在,我通常在星期二运行查询,因此我有这个代码:
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。 谢谢。
答案 0 :(得分:0)
如果您想要过去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。在此查询中,我们使用:
所以:
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。