【发布时间】:2022-01-05 17:28:54
【问题描述】:
案例简介;客户订阅了每月服务,续订日期可以是当月的任何一天,而不仅仅是月初,他也可以提前或延迟(到期日之前/之后)续订,然后他从配额包中消费每天,也许他可以在续订日期之前用完他所有的捆绑配额。所以我需要根据服务续订日期而不是日历日期来计算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 |
所需的输出将如下所示
|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 |
【问题讨论】:
-
您的输出似乎与
renewal_date无关。使用consumption_date看起来像是一个直线总和。 -
如果日期之前的运行总数是 135(所以还剩 5 个),而今天的消耗量是 10 怎么办?
-
@Andrew 我需要
renewal_date,因为配额会根据这个日期更新,而不是每个月开始更新。
标签: sql join teradata cumulative-sum