Sql server 获取最后5周范围

Sql server 获取最后5周范围,sql-server,Sql Server,我需要在五个单独的列表中加载过去五周的信息,无论是什么日期。所以这周,我需要在这之前的最后5周。下周我需要在那之前的最后5周,包括这一周。如果这是有意义的,并且不会让你感到困惑 所以基本上: ..BETWEEN '2015-09-21' AND '2015-09-27' 必须替换为: SELECT DATEADD(wk,DATEDIFF(wk,7,GETDATE()),0) AND DATEADD(wk,DATEDIFF(wk,7,GETDATE()),6) 这很好,第二周也一样: SELE

我需要在五个单独的列表中加载过去五周的信息,无论是什么日期。所以这周,我需要在这之前的最后5周。下周我需要在那之前的最后5周,包括这一周。如果这是有意义的,并且不会让你感到困惑

所以基本上:

..BETWEEN '2015-09-21' AND '2015-09-27'
必须替换为:

SELECT DATEADD(wk,DATEDIFF(wk,7,GETDATE()),0) AND DATEADD(wk,DATEDIFF(wk,7,GETDATE()),6)
这很好,第二周也一样:

SELECT DATEADD(wk,DATEDIFF(wk,14,GETDATE()),0) AND DATEADD(wk,DATEDIFF(wk,14,GETDATE()),6)
但从那时起,它就不再起作用了。我得到的结果与手动添加日期时不同

SELECT DATEADD(wk,DATEDIFF(wk,21,GETDATE()),0) AND DATEADD(wk,DATEDIFF(wk,21,GETDATE()),6)

我的代码是否有问题?

我认为您可以使用类似的代码,而不是手动设置数字:

DECLARE @TestDate AS DATETIME
DECLARE @WeekNumber AS INTEGER

-- previous 5 weeks
SELECT @TestDate = GETDATE()
SELECT @WeekNumber = -5

WHILE @WeekNumber < 0
BEGIN

    SELECT @TestDate,
        @WeekNumber,
        DATEADD(WEEK, DATEDIFF(WEEK, 0, DATEADD(WEEK, @WeekNumber, @TestDate)), 0) AS StartDate,
        DATEADD(WEEK, DATEDIFF(WEEK, 0, DATEADD(WEEK, @WeekNumber, @TestDate)), 6) AS EndDate

    SELECT @WeekNumber = @WeekNumber + 1

END

-- previous 5 weeks from next wednesday
SELECT @TestDate = DATEADD(DAY, 7, GETDATE())
SELECT @WeekNumber = -5

WHILE @WeekNumber < 0
BEGIN

    SELECT @TestDate,
        @WeekNumber,
        DATEADD(WEEK, DATEDIFF(WEEK, 0, DATEADD(WEEK, @WeekNumber, @TestDate)), 0) AS StartDate,
        DATEADD(WEEK, DATEDIFF(WEEK, 0, DATEADD(WEEK, @WeekNumber, @TestDate)), 6) AS EndDate

    SELECT @WeekNumber = @WeekNumber + 1

END
请注意WHILE循环的内容不会更改。我使用相同的代码提取关于两个不同日期的信息

如果使用BETWEEN作为日期时间数据类型,则应在一周的开始处添加7天,以查找该周的结束时间

DATEADD(wk,DATEDIFF(wk,21,GETDATE()),7)

您可能正在使用SQL Server。你应该给问题贴上这样的标签。检查这个链接会有帮助:你得到了什么结果?查询是否选择DATEADDwk,DATEDIFFwk,21,GETDATE,0,DATEADDwk,DATEDIFFwk,21,GETDATE,6返回意外的结果?@Greg,您的列中是否有时间部分,还是只有日期?您是否尝试增加7天而不是6天?DATEADDwk,DATEDIFFwk,21,GETDATE,7可能在前两周,你在周日没有任何结果。对于日期类型2015-09-27,00:00:00将计算所有结果,但对于日期时间类型不计算。