从今天开始如何查找同一工作日值的过去4周

时间:2019-07-10 21:36:25

标签: sql-server date

我正在尝试从今天以及最近4周的每周同一天选择记录。

  1. 今天(星期二)
  2. 最后一个星期二
  3. 之前的星期二
  4. 之前的星期二

我需要将其与当前日期绑定在一起,因为我每天都要运行此查询,所以我不想在手动指定日期范围的范围内或之间使用

到目前为止,我发现或尝试的所有内容都提取了数据的最后一个月,而不是同一工作日的最后4周。

select *
from table
where thedatecolumn >= DATEADD(mm, -1, GETDATE())

这有效,但是从上个月开始提取所有内容。

如果今天是7/10/2019,我需要

Data from 7/10/2019
Data from 7/3/2019
Data from 6/26/2019
Data from 6/19/2019

每天我都会运行此查询,因此我需要根据当前日期动态查询。

3 个答案:

答案 0 :(得分:0)

您可以尝试使用从今天开始并重复减去7天的递归cte-这样可以确保您始终在同一工作日着陆。举一个例子:

WITH cteFromToday AS(
 SELECT 0 AS WeeksBack, GETDATE() AS MyDate
 UNION ALL
 SELECT WeeksBack + 1 AS WeeksBack, DATEADD(d, -7, MyDate) AS MyDate
   FROM cteFromToday
)
SELECT TOP 5 *
  FROM cteFromToday
  OPTION ( MaxRecursion 0 );

答案 1 :(得分:0)

我相信您想回溯21天,然后过滤那些具有星期几的日期:

answer

答案 2 :(得分:0)

这很简单。将CURRENT_TIMESTAMP替换为给定日期。

SELECT CONVERT(DATE,CURRENT_TIMESTAMP) AS Today, 
DATEADD(DAY,-7,CONVERT(DATE,CURRENT_TIMESTAMP)) AS LastWeek ,
DATEADD(DAY,-14,CONVERT(DATE,CURRENT_TIMESTAMP)) AS TwoWeeksAgo, 
DATEADD(DAY,-21,CONVERT(DATE,CURRENT_TIMESTAMP)) AS ThreeWeeksAgo

因此,如果您要获取具有这些日期的一整天的一组范围的数据:

SELECT something
WHERE
datetimecolumn >= CONVERT(DATE,CURRENT_TIMESTAMP) AND datetimecolumn < DATEADD(DAY,1, CONVERT(DATE,CURRENT_TIMESTAMP)) -- Todays range, 
OR datetimecolumn >= DATEADD(DAY,-7,CONVERT(DATE,CURRENT_TIMESTAMP)) AND datetimecolumn < DATEADD(DAY,1,DATEADD(DAY,-7,CONVERT(DATE,CURRENT_TIMESTAMP)))-- LastWeek ,
OR datetimecolumn >= DATEADD(DAY,-14,CONVERT(DATE,CURRENT_TIMESTAMP)) AND datetimecolumn < DATEADD(DAY,1,DATEADD(DAY,-14,CONVERT(DATE,CURRENT_TIMESTAMP)))-- TwoWeeksAgo, 
OR datetimecolumn >= DATEADD(DAY,-21,CONVERT(DATE,CURRENT_TIMESTAMP)) AND datetimecolumn < DATEADD(DAY,1, DATEADD(DAY,-21,CONVERT(DATE,CURRENT_TIMESTAMP))) -- ThreeWeeksAgo