sql - 将一年中的一周与“溢出”进行比较
问题描述
因此,我希望能够查看一年中的特定一周,并查看前后 6 周的所有数据。
WHERE t1.weeknum >= week-6 AND t1.weeknum <=week+6
所以如果周是 20,我想返回 14 到 26 之间的所有内容。
问题是周 >=47 和 <=6。例如,如果周为 4,我希望范围为 50 到 10。年份是一个单独的维度,我包括所有数据而不管年份。
我认为这类似于指南针航向。假设你在 350 度,然后右转 30 度。350+30 = 20 度方位角。
我正在使用 SQL Server Express
解决方案
模运算符 (%)似乎是您想要的。由于您使用范围1
来52
表示周数,因此您需要在计算时将范围转移0
到51
:
select WeekNumber,
( WeekNumber - 1 + 52 - 6 ) % 52 + 1 as WeekFrom,
( WeekNumber - 1 + 6 ) % 52 + 1 as WeekTo
from ( values ( 1 ), ( 4 ), ( 6 ), ( 20 ), ( 50 ), ( 52 ) ) as Samples( WeekNumber );
通过解释:
- 开始
WeekNumber
。 - 减去
1
以将其移至从零开始的范围:0
到51
. - 对于“从”值添加
52
,以便结果始终为非负数。这假定输入值始终在 到 的范围1
内52
。 - 添加或减去所需的偏移量 (
6
)。 - 使用模数计算带有环绕的值。
- 添加
1
以将结果移回基于 1 的范围:1
to52
。
推荐阅读
- python - 我们可以使用 Spyder 从 Docker 容器远程运行和调试 Python 代码吗
- swift - 缩放手势快速放大和缩小相机
- javascript - 从可观察订阅返回承诺值
- ios - 我可以仅使用 iPad 应用程序创建手表扩展程序吗?
- java - Hazelcast 异步客户端 - 检查“CLIENT_CONNECTED”状态
- wordpress - 在服务器上找不到 Python 脚本
- javascript - getAddress.io API 脚本
- javascript - 如何显示所有被禁止用户的禁止列表?
- reactjs - 在draftjs中渲染“@ with random text”时崩溃
- python - 尝试在 Ubuntu 上安装 osmread 模块时出错