在每一行的两个日期之间计数
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
我需要计算 [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 |