如何编写一个选择最后一天的查询并从那里返回1周?

时间:2014-12-28 14:39:10

标签: sql sede

我在SEDE上使用this query。我刚刚每周都在编辑WHERE p.CreationDate > '2014-12-21T00:00:00.001',只选择上周的记录。因此,例如之前的编辑只是从12-7改为12-21,等等。

我正在尝试编辑该部分,以便我不必每周都继续编辑它。

我以为我可以做点什么

WHERE DATEDIFF(DAY, p.creationDate, GETDATE()) <= 7

将仅选择过去7天的结果。

然而,这仅适用于更新SEDE时的星期日。如果我在星期三运行查询,则此查询将缺少三天的结果。

我怎么能写这个where声明来找到最近的星期日,或星期日,然后从那里回来一周?

3 个答案:

答案 0 :(得分:2)

要查找previous sunday,请使用此代码。

select DateAdd(dd, -1, DateAdd(wk, DateDiff(wk, 0, getdate()), 0)) [Previous Sunday]

Where clause应该是类似的。

Select ... from tablename 
WHERE DATEDIFF(DAY, p.creationDate, DateAdd(dd, -1, DateAdd(wk, DateDiff(wk, 0, getdate()), 0))) <= 7

答案 1 :(得分:1)

有几种解决方案,与此类似。 用where

之类的东西替换where子句中的GetDate
 Cast(DateAdd(day,-DatePart(weekday,GetDate())+1,GetDate()) as Date)

其中+1被调整得更大或更小,以移动到您想要开始的一周中的特定日期。 +1导致这个星期天。

答案 2 :(得分:0)

-- Assuming your db @@DATEFIRST in on sunday (i.e 7)

WHERE p.creationdate >= DATEADD( day, -6 - DATEPART(weekday,GETDATE()), GETDATE() )