这是我的示例数据集。给出了 Seq_no 和 value 列,我们需要使用 postgresql 查找 Cum.sum 和 Bucket 列。要查找累积和,我可以写
sum(value) over (order by seq_no rows between unbounded preceding and current row)
。但如果值达到阈值,则重置 cum.sum。例如,阈值是 20 ,行 1,2 和 3 值的总和是 23 ,大于 20 。所以我们重置窗口函数。下一个阈值从 seq_no 4 开始计算。
尝试使用此sql查询根据阈值计算累积和,并在每次达到阈值后重置太阳。
WITH recursive cte AS (
SELECT
seq_no,
value,
CASE
WHEN value > 20 THEN 1
ELSE 0
END AS reset,
value AS cum_sum,
value AS bucket
FROM your_table
WHERE seq_no = 1
UNION ALL
SELECT
t.seq_no,
t.value,
CASE
WHEN cte.cum_sum + t.value > 20 THEN cte.reset + 1
ELSE cte.reset
END,
CASE
WHEN cte.cum_sum + t.value > 20 THEN t.value
ELSE cte.cum_sum + t.value
END,
cte.reset + 1
FROM your_table t
JOIN cte ON t.seq_no = cte.seq_no + 1
)
SELECT seq_no, cum_sum, bucket FROM cte
ORDER BY seq_no;