我想查询一些工作日之间的数据,如下所示:
查询将在每个星期一自动运行,因此我想为其设置一个动态条件,以便它自动选择该天,而不依赖于将来的任何一天。
例如,如果今天是星期一01/08/2018:
我想在WHERE子句中设置该条件。现在,我以这种方式查询它,例如使用恒定日期作为上周数据:
SELECT *
FROM thisTable
WHERE Date(operation_date) BETWEEN '2018-06-10' AND '2018-06-16'
DBMS:Amazon Redshift
答案 0 :(得分:1)
DATE_TRUNC Function是您的朋友。它会截断为星期一。
SELECT
CURRENT_DATE AS today,
DATE_TRUNC('week', CURRENT_DATE) as most_recent_monday,
DATE_TRUNC('week', CURRENT_DATE) - 2 AS most_recent_saturday,
DATE_TRUNC('week', CURRENT_DATE) - 8 AS sunday_before_most_recent_saturday
返回:
2018-06-21 | 2018-06-18 00:00:00 | 2018-06-16 00:00:00 | 2018-06-10 00:00:00
请注意,它将日期视为一天之初的午夜 。因此,您实际上并不想查询星期日至星期六。您实际上是要查询星期日至星期日(这实际上是指星期日开始的午夜到下一个星期日开始的午夜)。假设您的原始日期为时间戳。
如果您的原始日期纯粹是日期,则您要使用星期日至星期六。
如果要查询“上周”(如果您的定义是星期天到星期日)中的所有内容,并假设有时间戳,请使用:
SELECT *
FROM thisTable
WHERE operation_date BETWEEN
-- Most recent Monday minus 8 days = Two Sundays ago
DATE_TRUNC('week', CURRENT_DATE) - 8 AND
-- Most recent Monday minus 1 day = Most recent Sunday
DATE_TRUNC('week', CURRENT_DATE) - 1
(好吧,除非您已经在星期日,但这就是您的问题!)
如果日期是日期,则必须对其进行一些调整。
答案 1 :(得分:0)
最后星期六:date_trunc('week',getdate())-interval '2 day'
上一个星期六:date_trunc('week',getdate())-interval '9 day'
这是基于星期一的一周