假设我有一个包含quantity
列的表格。
CREATE TABLE transfers (
user_id integer,
quantity integer,
created timestamp default now()
);
我希望使用窗口函数迭代地通过分区,但访问输出行,而不是输入表行。
要访问输入表行,我可以这样做:
SELECT LAG(quantity, 1, 0)
OVER (PARTITION BY user_id ORDER BY created)
FROM transfers;
我需要访问上一个输出行来计算下一个输出行。如何访问输出中的滞后行?类似的东西:
CREATE VIEW balance AS
SELECT LAG(balance.total, 1, 0) + quantity AS total
OVER (PARTITION BY user_id ORDER BY created)
FROM transfers;
修改
这是一个支持如何访问窗口分区中上一个输出行的问题的最小示例。我实际上并不想要一笔钱。
答案 0 :(得分:0)
您似乎尝试计算Shape
。幸运的是,这正是running sum
窗函数的作用:
Sum()
答案 1 :(得分:0)
我想,看看这个问题,你唯一需要的就是计算累积金额 要计算累积总和,请使用以下查询:
SELECT *,
SUM( CASE WHEN quantity IS NULL THEN 0 ELSE quantity END)
OVER ( PARTITION BY user_id ORDER BY created
ROWS BETWEEN unbounded preceding AND current row
) As cumulative_sum
FROM transfers
ORDER BY user_id, created
;
但是如果你想要更复杂的计算,特别是包含某些依赖于prevoius行结果的条件(决策),那么你需要一个递归方法。