如何查询SQL的上周六和前周六?

How to query last Saturday and the one before in SQL?

我想查询一些工作日之间的数据,如下:

  1. 上周六
  2. 前一个星期天
  3. 2号星期日查询的前一个星期六
  4. 3号查询星期六的前一个星期日

查询会在每个星期一自动运行,所以我想为它设置一个动态条件,以便它自动选择那几天,而不依赖于它会运行的任何一天在将来。

例如,如果今天是 2018 年 1 月 8 日星期一:

  1. 将是 01/06/2018
  2. 将是 2017 年 12 月 31 日
  3. 将是 2017 年 12 月 30 日
  4. 将是 2017 年 12 月 24 日

我想在 WHERE 子句中设置该条件。现在我正在以这种方式查询它,例如上周数据的固定日期:

SELECT *
FROM thisTable
WHERE Date(operation_date) BETWEEN '2018-06-10' AND '2018-06-16'

数据库管理系统:亚马逊红移

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

Returns:

2018-06-21 | 2018-06-18 00:00:00 | 2018-06-16 00:00:00 | 2018-06-10 00:00:00

请注意,它将日期视为午夜一天的开始。所以,你真的不想查询星期天到星期六。您实际上想要查询 Sunday to Sunday(这实际上意味着从周日开始的午夜到下周日开始的午夜)。这假设您的源日期是 timestamp.

如果您的源日期纯粹是 日期,那么您会希望使用 周日到周六

如果您想查询从 "last week" 开始的所有内容(如果您的定义是星期日到星期日),并假定时间戳,请使用:

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

(好吧,除非你已经在星期天了,但那是你的问题!)

如果日期是日期,则需要稍微调整一下。

上周六:date_trunc('week',getdate())-interval '2 day'

上周六:date_trunc('week',getdate())-interval '9 day'

这是基于星期一的一周