0

我在 SEDE 上使用这个查询。WHERE p.CreationDate > '2014-12-21T00:00:00.001'每周都在编辑类似的内容,只选择上周的记录。因此,例如,以前的编辑只是从 12-7 的 12-14 更改为 12-21,等等。

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

我在想我可以做类似的事情

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

这将只选择过去 7 天的结果。

但是,这仅适用于 SEDE 更新的周日。如果我在星期三运行查询,则此查询将丢失三天的结果。

我怎么能写这个where语句来找到最后一个最近的星期天,或者是星期天,然后从那里回去一周?

4

3 回答 3

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
于 2014-12-28T15:04:40.037 回答
1

有几种解决方案,与此类似。用类似的东西替换 where 子句中的 GetDate

 Cast(DateAdd(day,-DatePart(weekday,GetDate())+1,GetDate()) as Date)

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

于 2014-12-28T14:58:32.543 回答
0
-- Assuming your db @@DATEFIRST in on sunday (i.e 7)

WHERE p.creationdate >= DATEADD( day, -6 - DATEPART(weekday,GETDATE()), GETDATE() )
于 2014-12-28T15:03:53.900 回答