如何编写选择最后一个特定日期并从那里返回 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))) &lt;= 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 中返回特定周的第一个日期(星期日)

NSDateComponents weekOfYear 返回错误的日期

如何比较日期并从选择列表中选择选项?

如何在 GWT 中获取最后一周的日期

查找前一周的最后一天

当月的一周的结束日期