在每一行的两个日期之间计数

Count between two dates for each row

我需要计算 [selected YearMonth] 每一行过去 12 个月的 [销售额]。例如,如果选择 202110,我知道在 202110 和 202011 之间我有一次销售,202110 前面的 [HAD SALES] 应该显示 1,但是,如果选择 202008 并且我回顾过去的 12 个月,没有销售并且我的行应该显示 0.

我需要类似下面的语句,但我的语句中没有 where 子句或参数,但我不确定如何将它们放在一起。

SELECT 
    [SELECTED YEARMONTH], 
    (COUNT(SALES) FROM TABLE 
     WHERE [SELECTED YEARMONTH] BETWEEN [SELECTED PREVYEAR] AND [SELECTED YEARMONTH])
FROM 
    TABLE;

试试下面的语句。

请注意,您应该在 OVER 子句中使用 RANGE 而不是 ROWS,如果有机会,您的 [= 中有一个月没有行27=] 如示例所示。 ORDER BY returns 连续枚举几个月的表达式,这对我们的算法来说是必要的 RANGE.

如果月份没有间隔,那么您可以使用 ORDER BY YEARMONTH ROWS BETWEEN 11 PRECEDING AND CURRENT ROW 代替。

SELECT 
  YEARMONTH
, SUM (SALES) OVER 
(
ORDER BY YEARMONTH / 100 * 12 + MOD (YEARMONTH, 100) 
RANGE BETWEEN 11 PRECEDING AND CURRENT ROW 
) AS SALES
FROM 
(
VALUES
  (202110, 1)
--, (202109, 1)
, (202108, 1)
, (202107, 1)
, (202106, 1)
, (202105, 1)
, (202104, 1)
, (202103, 1)
, (202102, 1)
, (202101, 1)
, (202012, 1)
, (202011, 1)
, (202010, 1)
, (202009, 1)
, (202008, 1)
) T (YEARMONTH, SALES)
ORDER BY YEARMONTH DESC
YEARMONTH SALES
202110 11
202108 12
202107 12
202106 11
202105 10
202104 9
202103 8
202102 7
202101 6
202012 5
202011 4
202010 3
202009 2
202008 1