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。
您可以使用一些<逻辑<=来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)