[英]Teradata SQL Cumulative Sum over date from another table
案例簡介; 客戶訂閱了每月服務,續訂日期可以是當月的任何一天,而不僅僅是月初,他也可以提前或延遲(到期日之前/之后)續訂,然后他從配額包中消費每天,也許他可以在續訂日期之前用完他的所有捆綁配額。 所以我需要根據服務續訂日期而不是日歷日期來計算Consumption_Value
的Running Total
,我有兩個表:
Consumption_T
,保存訂閱者在特定優惠 ID 上的每日消費信息,如以下示例|Subs_ID|Consumption_Date|Offer_ID|Quota|Consumption_Value|
|-------+----------------+--------+-----+-----------------|
|12345 |22-01-2021 |123 |140 |1 |
|12345 |23-01-2022 |123 |140 |3 |
|12345 |24-01-2023 |123 |140 |5 |
|12345 |25-01-2022 |123 |140 |3 |
|12345 |26-01-2023 |123 |140 |6 |
|12345 |27-01-2024 |123 |140 |4 |
|… |… |… |… |… |
|12345 |15-02-2021 |123 |140 |10 |
|12345 |22-02-2021 |123 |140 |4 |
Renewal_T
用於續訂日期,如下所示:|Subs_ID|Renewal_Date|Offer_ID|
|-------+------------+--------|
|12345 |22-01-2021 |123 |
|12345 |22-02-2021 |123 |
|12345 |18-03-2022 |123 |
|12345 |19-04-2022 |123 |
|12345 |15-05-2023 |123 |
|12345 |16-06-2023 |123 |
所需的 output 將如下所示
|Subs_ID|Consumption_Date|Offer_ID|Quota|Consumption_Value|Running Total|
|-------+----------------+--------+-----+-----------------+-------------|
|12345 |22-01-2021 |123 |140 |1 |1 |
|12345 |23-01-2022 |123 |140 |3 |4 |
|12345 |24-01-2023 |123 |140 |5 |9 |
|12345 |25-01-2022 |123 |140 |3 |12 |
|12345 |26-01-2023 |123 |140 |6 |18 |
|12345 |27-01-2024 |123 |140 |4 |22 |
|… |… |… |… |… |… |
|12345 |15-02-2021 |123 |140 |10 |140 |
|12345 |22-02-2021 |123 |140 |4 |4 |
model的數據不是很清楚; 續訂期是否適用於Subs_Id或Subs_Id + Offer_Id組合? 您確定 Consumption_date 和 Renewal_Date 示例的年份是否正確(2022、2023 等); 這些不連貫。 如果我假設續訂的主鍵是 Subs_Id+Offer_Id+Renewal_Date,那么這將產生您想要的:
select T1.*,
sum(Consumption_Value)
over (partition by T1.Subs_Id, T1.Offer_ID, SubsPeriod.RenewalDate_From
order by Consumption_Date
rows between unbounded preceding and current row) as "Running Total"
from Consumption_T as T1
inner join
(select
Subs_Id
, Offer_Id
, Renewal_Date as RenewalDate_From
, LEAD(Renewal_Date-1,1,date '3000-01-01')
over (partition by Subs_ID, Offer_Id order by Renewal_Date) as RenewalDate_To
from Renewal_T
) SubsPeriod
on SubsPeriod.Subs_Id=T1.Subs_Id
and SubsPeriod.Offer_Id=T1.Offer_Id
and T1.Consumption_Date
between SubsPeriod.RenewalDate_From and SubsPeriod.RenewalDate_To
order by T1.Subs_Id, T1.OffeR_Id, Consumption_date
假設示例日期均為 2021 年。
子查詢 SubsPeriod 推導出續費周期(包括 from & to 日期),然后我們將消費數據加入這些周期,期望消費日期在續費周期內。 然后,我們計算每個 subs_id、offer_id、續訂期的運行總計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.