从当年的周数中减去 N

fdk*_*fsf -1 sql t-sql sql-server

我们有一个WeeklyResults 看起来像这样的表:

Year    WeekNum   Value
2021    47        11.0
2021    48        14.0
2021    49        12.0
2021    50        17.0
2021    51        11.8
2021    52        11.3
2021    53        11.1
2022    01        11.5
2022    02        11.5  
2022    03        81.5  
Run Code Online (Sandbox Code Playgroud)

我们有一个包含两个参数的报告:日期和周数。报告需要根据所选周数显示过去 6 周的情况。

问题是,如果用户选择 2022 年第 2 周,我如何减去 6 周,以便得到 2021 年第 50、51、52、53 周和 2022 年第 1、2 周?

因此,如果用户选择2022 年第 02 周,它将显示基于 2022 年第 2 周(第 50 周到第 02 周)的最后 6 周。如果用户选择 2021 和 52,则会显示 wk47-52。

use*_*983 5

您可以使用一些<逻辑<=TOP实现ORDER BY这一点:

DECLARE @Year int = 2022, 
        @WeekNum int = 3; --Note, if you are storing WeekNum as a (var)char,
                          --your leading zeros imply you are, then define the
                          --variable as a char(2).

SELECT TOP (6)
       [Year],
       WeekNum,
       [Value]
FROM dbo.YourTable
WHERE ([Year] = @Year AND WeekNum <= @WeekNum)
   OR [Year] < @Year
ORDER BY [Year] DESC,
         WeekNum DESC;
Run Code Online (Sandbox Code Playgroud)

  • 不客气,@fdkgfosfskjdlsjdlkfsf。如果它回答了问题,请考虑将其标记为解决方案,以便未来的读者知道答案是有帮助的。谢谢。(您的其他一些[问题](/sf/users/293402651/?tab=questions)可以进行相同的处理。) (2认同)