我們的表格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
我們有一個包含兩個引數的報告:Date 和 WeekNum。報告需要根據所選的周數顯示過去 6 周。
問題是,如果用戶選擇 2022 年的第 2 周,我如何減去 6 周,以便獲得 2021 年的第 50、51、52、53 周和 2022 年的第 1、2 周?
因此,如果用戶選擇2022和Week 02,它將顯示基于 2022 年第 2 周的最后 6 周(wk50 到 Wk02)。如果用戶選擇 2021 和 52,它將顯示 wk47-52。
uj5u.com熱心網友回復:
您可以使用一點點<和<=邏輯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;
uj5u.com熱心網友回復:
試試這個:
DECLARE @Year int = 2022
, @WeekNum varchar(02) = '02'
;
WITH FinalTable AS
(
SELECT TOP 6 *
FROM WeeklyResults
ORDER BY LTRIM(Year) WeekNum DESC
)
SELECT *
FROM FinalTable
ORDER BY Year, WeekNum
uj5u.com熱心網友回復:
另一個不涉及 ORDER BY 的選項。使用DATEPART,您可以確定上一年的最后一周并減去獲得所需記錄的周數。
您可能需要調整一周的第一天是您的計數。有關詳細資訊,請參閱這篇文章。
DECLARE
@Year INT = 2022
, @WeekNum INT = 3;
SELECT
*
FROM
WeeklyResults
WHERE
Year = @Year
AND WeekNum <= @WeekNum
OR
(
@WeekNum < 6
AND Year = @Year - 1
AND WeekNum > DATEPART (WEEK, CONCAT ('12/31/', @Year - 1)) - @WeekNum
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410549.html
標籤:
