我现在正在学习 SQL,需要一个查询来返回过去 12 周(不包括本周),下面的查询工作得很好 - 直到我们进入 2019 年!
我的表有 4 列,BuildWeek、BuildYear、Info1、Info2,均为 int。
select *
from Dashboard
where BuildWeek in (datepart(week, getdate()) - 1,
datepart(week, getdate()) - 2,
datepart(week, getdate()) - 3,
datepart(week, getdate()) - 4,
datepart(week, getdate()) - 5,
datepart(week, getdate()) - 6,
datepart(week, getdate()) - 7,
datepart(week, getdate()) - 8,
datepart(week, getdate()) - 9,
datepart(week, getdate()) - 10,
datepart(week, getdate()) - 11,
datepart(week, getdate()) - 12,
datepart(week, getdate()) - 13)
and BuildYear = datepart(year, getdate())
order by
BuildWeek desc
我知道这不是最干净的查询,所以我很愿意接受教育,我尝试了一些东西(使用 dateadd 无济于事),但似乎无法让它按照我希望的方式运行。我猜上面的查询可能源于查询减号(当前日期 -1 将是 0,-2 将是 -1,所以找不到结果?)但我不知道如何让它向后看返还额外的几周。
最佳答案
另一个解决方案是从 BuildWeek
和 BuildYear
生成日期(例如,一周的第一天),可以在 WHERE 中使用
子句。
这种方法的优点是保证返回过去 12 周的记录,即使其中不正好是 12 周(例如,如果周系列中有间隙),或者 future 的记录存在。
SELECT d.*
FROM Dashboard d
WHERE
DATEADD( wk, DATEDIFF( wk, 7, CAST( d.BuildYear AS NVARCHAR(100) ) ) + (d.BuildWeek-1) , 7 )
BETWEEN DATEADD( week, -12, GETDATE() ) AND GETDATE()
ORDER BY
d.BuildYear DESC,
d.BuildWeek DESC
测试于this db fiddle .
关于sql - 根据周将日期部分转入上一年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54064117/