sql - 根据周将日期划分为上一年
问题描述
我目前正在学习 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,所以找不到结果?)但我不确定如何让它向后看归还那些额外的几周。
解决方案
假设您每周有一行:
select top (12) d.*
from Dashboard d
order by d.year desc, d.BuildWeek desc;
为避免未来几周:
select top (12) d.*
from Dashboard d
where year < year(getdate()) or
(year = year(getdate()) and buildweek <= datepart(week, getdate())
order by d.year desc, d.BuildWeek desc;
或者,如果您想使用 awhere
并且years 有 52 周:
select d.*
from dashboard d
where (y.year * 52 + buildweek) >= year(getdate()) * 52 + datepart(week, getdate());
如果年份可以有 53 周,这种方法会变得有点棘手。
推荐阅读
- javascript - Discord bot 响应基于 javascript 中的变量
- c# - 从 for 循环 C3 中的 2000 开始倒数
- r - 在 R 中使用 Complexheatmap 中的异常值可视化数据中的图例颜色?
- django - Django 序列化器定义初始对象
- sed - sed:查找并替换以特定字符串开头的行中的第 n 个字符
- ios - 圆角半径问题
- python - 由网格值定义的曲面下的线积分 - Python
- vue.js - 在 VusJS 中访问子组件内的插槽函数
- mysql - 我在哪里可以看到 MYSQL 中的过程?
- c++ - constexpr 构造函数的参数类型 'std::function' 不是文字类型