我正在尝试从今天以及最近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
每天我都会运行此查询,因此我需要根据当前日期动态查询。
答案 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