计算N个行的数量之和,该行的周数在当前行的周范围内

问题描述 投票:0回答:1

我有一个表,其中的列categoryAcategoryByearmonthweekquantity对应于特定值。

我想找到该特定类别组合过去12周的quantity值的总和。

我尝试了下面的代码

查询1

select
    categoryA
    , categoryB
    , year
    , month
    , week
    , SUM(quantity) OVER 
            PARTITION BY(categoryA, categoryB 
            ORDER BY categoryA, categoryB, year, month, week rows BETWEEN 12 PRECEDING AND 1 PRECEDING)
FROM TABLE1

但是问题是,本周可能会有间隙,例如,2020年在第20周可能没有行,在这种情况下,该行的数量必须被视为0。

我尝试生成必须对每行相加的[[quantity之间的星期范围,如下所示:

查询2

SELECT year,week, month, categoryA, categoryB, CASE WHEN week> 12 THEN week- 12 WHEN week= 1 THEN 0 ELSE 1 END AS startWeek1, CASE WHEN week<> 1 THEN week- 1 WHEN week= 1 THEN 0 END AS endWeek1, CASE WHEN week<> 1 THEN year ELSE 0 END AS startYear, CASE WHEN week> 12 THEN 0 ELSE year- 1 END AS EndYear, CASE WHEN week> 12 THEN 0 ELSE datepart(week, DATEFROMPARTS(year -1, 12, 31)) - (12 - week) END AS startWeek2, CASE WHEN week > 12 THEN 0 ELSE datepart(week, DATEFROMPARTS(year-1, 12, 31)) END AS endWeek2
但是现在我必须以某种方式比较我的[[query 1
中的最后12行是否落在当前行中指定的星期和年的范围内]

请注意,我能够通过使用UDF来实现该解决方案,但是由于我不得不为每一行都调用它,因此性能太差了。

我的表中的数据如下:

year month week categoryA categoryB quantity 2020 1 1 steel white 2 2020 1 2 steel white 4 2020 2 5 steel white 5 2020 2 6 steel white 1 2020 10 40 steel white 1 2020 10 41 steel white 10

预期结果:

year   month  week  categoryA  categoryB  quantity  lastTwelveWeeksQuantity
2020   1      1     steel      white      2          0
2020   1      2     steel      white      4          2
2020   2      5     steel      white      5          6
2020   2      6     steel      white      1          11 
2020   10     40    steel      white      1          0
2020   10     41    steel      white      10         1

编辑

另一个跨度跨年的用例

year month week categoryA categoryB quantity 2019 12 43 steel white 2 2020 1 1 steel white 2 2020 1 2 steel white 4 2020 2 5 steel white 5 2020 2 6 steel white 1 2020 10 40 steel white 1 2020 10 41 steel white 10 预期结果:
year   month  week  categoryA  categoryB  quantity  lastTwelveWeeksQuantity
2019   12     43    steel      white      2         0
2020   1      1     steel      white      2         2 
2020   1      2     steel      white      4         4(considering quantity from 2019 as it falls in range for last 12 weeks i,e week 1 in 2020 and week 53 to 43 in 2019) 
2020   2      5     steel      white      5         6
2020   2      6     steel      white      1         11
2020   10     40    steel      white      1         0
2020   10     41    steel      white      10        1

我有一个表,其中包含列categoryA,categoryB,年,月,周以及与特定值相对应的数量。我想找到该过去12周的数量值总和...

sql-server tsql
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.