从 SQL/Oracle 中的给定当前日期计算 90 个日历日期(回顾)的总和

**Calender_Date**   **Customer_ID**     **Amount**
01-Jan-21          20211003              59
01-Jan-21          20211005              100
27-Jan-21          20211003              25
25-Feb-21          20211003              188
23-Mar-21          20211005              67
24-Apr-21          20211009              43
25-May-21          20211013              21
26-May-21          20211013              89
11-Jul-21          20211009              65
28-Aug-21          20211003              90

需要:考虑 Customer_ID - 滚动总和超过 90 日历回顾日期(从每个给定的当前日期)。

输出要求或期望的结果

**Calender_Date**   **Customer_ID** **Amount**  **SumofLookbackRolling90DayAmount**
1-Jan-21           20211003            59           59
1-Jan-21           20211005            100          100
27-Jan-21          20211003            25           84
25-Feb-21          20211003            188          272
23-Mar-21          20211005            67           167
24-Apr-21          20211009            43           43
25-May-21          20211013            21           21
26-May-21          20211013            89           110
11-Jul-21          20211009            65           108
28-Aug-21          20211003            90           90

回答

您可以使用带有范围窗口的解析函数:

SELECT t.*,
SUM(amount) OVER (
PARTITION BY customer_id
ORDER BY calendar_date
RANGE BETWEEN INTERVAL '90' DAY PRECEDING
AND INTERVAL '0' DAY FOLLOWING
) AS rolling_sum
FROM   table_name t

其中,对于您的示例数据:

SELECT t.*,
SUM(amount) OVER (
PARTITION BY customer_id
ORDER BY calendar_date
RANGE BETWEEN INTERVAL '90' DAY PRECEDING
AND INTERVAL '0' DAY FOLLOWING
) AS rolling_sum
FROM   table_name t

输出:

CALENDAR_DATE 顾客ID 数量 ROLLING_SUM
01-JAN-21 20211003 59 59
21 年 1 月 27 日 20211003 25 84
25-FEB-21 20211003 188 272
28 年 8 月 21 日 20211003 90 90
01-JAN-21 20211005 100 100
21 年 3 月 23 日 20211005 67 167
24-APR-21 20211009 43 43
21 年 7 月 11 日 20211009 65 108
21 年 5 月 25 日 20211013 21 21
21 年 5 月 26 日 20211013 89 110

db<>在这里摆弄


以上是从 SQL/Oracle 中的给定当前日期计算 90 个日历日期(回顾)的总和的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>