You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL 按客户ID分组实现90个自然日回溯滚动求和

Oracle 90天回溯滚动求和SQL实现

需求说明

现有业务表含3个字段:交易日期Calender_Date、客户IDCustomer_ID、交易金额Amount,要求按客户ID分组,以每行交易日期为基准,计算向前回溯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

实现SQL语句

假设业务表表名为customer_trans,Calender_Date字段为Oracle原生DATE类型,可直接使用窗口函数实现需求:

SELECT 
    Calender_Date,
    Customer_ID,
    Amount,
    SUM(Amount) OVER (
        PARTITION BY Customer_ID 
        ORDER BY Calender_Date 
        RANGE BETWEEN INTERVAL '90' DAY PRECEDING AND CURRENT ROW
    ) AS SumofLookbackRolling90DayAmount
FROM 
    customer_trans
ORDER BY 
    Calender_Date, Customer_ID;

注意事项

如果Calender_Date字段存储格式为字符串,需先转换为DATE类型再计算,修改窗口函数内ORDER BY部分即可:

SUM(Amount) OVER (
    PARTITION BY Customer_ID 
    ORDER BY TO_DATE(Calender_Date, 'DD-MON-RR', 'NLS_DATE_LANGUAGE = AMERICAN')
    RANGE BETWEEN INTERVAL '90' DAY PRECEDING AND CURRENT ROW
) AS SumofLookbackRolling90DayAmount

内容的提问来源于stack exchange,提问作者NewTechGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:42:01