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

ergxz8rk  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(144)

我需要在[selected YearMonth]的每一行中统计过去12个月的[SALES]。例如,如果选择了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;

agxfikkp

agxfikkp1#

请尝试以下语句。
请注意,如果您的数据表中某个月份没有数据列,您应该在OVER子句中使用RANGE,而不是ROWS,如范例所示。ORDER BY中使用的运算式会传回月份的连续枚举,这是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

| 年月|销售部|
| - -|- -|
| 小行星20211|十一|
| 小行星202|十二个|
| 小行星202|十二个|
| 小行星202|十一|
| 小行星202| 10个|
| 小行星202|九个|
| 小行星202|八个|
| 小行星202|七个|
| 小行星202|六个|
| 二○一二年|五个|
| 二○一一年|四个|
| 202010年|三个|
| 二○ ○九年|2个|
| 小行星2008|一个|

相关问题