首页 > 解决方案 > 将一年中的一周与“溢出”进行比较

问题描述

因此,我希望能够查看一年中的特定一周,并查看前后 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

标签: sqlsql-servertsqlsql-server-express

解决方案


模运算符 (%)似乎是您想要的。由于您使用范围152表示周数,因此您需要在计算时将范围转移051

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以将其移至从零开始的范围:051.
  • 对于“从”值添加52,以便结果始终为非负数。这假定输入值始终在 到 的范围152
  • 添加或减去所需的偏移量 ( 6)。
  • 使用模数计算带有环绕的值。
  • 添加1以将结果移回基于 1 的范围:1to 52

推荐阅读