如何编写选择最后一个特定日期并从那里返回 1 周的查询?
Posted
技术标签:
【中文标题】如何编写选择最后一个特定日期并从那里返回 1 周的查询?【英文标题】:How to write a query that selects last specific day and goes back 1 week from there? 【发布时间】:2015-02-24 23:05:12 【问题描述】:我在 SEDE 上使用this query。我刚刚像每周一样编辑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
声明来喜欢找到最近的星期天,或者是星期天,然后从那里返回一周?
【问题讨论】:
WHERE DATEDIFF(DAY, p.creationDate, DateAdd(dd, -1, DateAdd(wk, DateDiff(wk, 0, getdate()), 0))) <= 7
【参考方案1】:
要查找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
【讨论】:
【参考方案2】:有几种解决方案,与此类似。 将 where 子句中的 GetDate 替换为
Cast(DateAdd(day,-DatePart(weekday,GetDate())+1,GetDate()) as Date)
将 +1 调整得更大或更小,以移动到您想要开始的一周中的特定日期。 +1 会使它变成星期天。
【讨论】:
【参考方案3】:-- Assuming your db @@DATEFIRST in on sunday (i.e 7)
WHERE p.creationdate >= DATEADD( day, -6 - DATEPART(weekday,GETDATE()), GETDATE() )
【讨论】:
以上是关于如何编写选择最后一个特定日期并从那里返回 1 周的查询?的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL redshift 中返回特定周的第一个日期(星期日)