从当年的周数中减去 N
Subtract N from weeknum of current year
我们有 table 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 和 第 02 周,它将显示基于 2022 年第 2 周的最后 6 周(第 50 周到第 02 周)。如果用户选择 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;
试试这个:
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
另一个不涉及 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
);
我们有 table 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 和 第 02 周,它将显示基于 2022 年第 2 周的最后 6 周(第 50 周到第 02 周)。如果用户选择 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;
试试这个:
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
另一个不涉及 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
);