获得每个月的余额并限制红移

Get each month balance with capping on redshift

我想获取这些记录的每个月余额,每个月初的上限为 500 个积分。

我有点卡住了,因为我认为我不能简单地进行滚动总和,因为客户的最大余额是他的新信用额度的两倍(我在示例中使用 500 作为最大值)。

这是我的数据:

CREATE TABLE table1 as (
SELECT 'A' as customer_id, 250 as new_credits, -62 as debit, 1 as month_nb
UNION ALL
SELECT 'A', 250,    -84,    2
UNION ALL
SELECT 'A', 250,    -8, 3
UNION ALL
SELECT 'A', 210,    -400,   4
UNION ALL
SELECT 'A', 210,    -162,   5
UNION ALL
SELECT 'A', 210,    0,  6
)

我希望看到这些结果:

有什么想法吗?谢谢!

我正在添加一个新答案,因为之前的答案已经过时了。我不确定 Redshift 的确切语法是什么(文档似乎没有完全更新),但我的想法是:

with recursive cte as (
      select month_nb, customer_id, new_credits, debit, new_credits as starting_balance
      from table1
      where month_nb = 1
      union all
      select t1.month_nb, t1.customer_id, t1.new_credits, t1.debit,
             least(500, cte.starting_balance + cte.debit + t1.new_credits)
      from cte join
           table1 t1
           on t1.month_nb = cte.month_nb + 1 and t1.customer_id = cte.customer_id
     )
select *
from cte;

例如,我不确定是否需要 recursive 关键字。

并且 here 是一个使用 Postgres 的 db<>fiddle。