假设我有一个带有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;编辑
这是一个支持如何访问窗口分区中的上一个输出行的最小示例。我其实不想要一笔钱。
发布于 2016-01-06 19:41:56
似乎您试图计算一个running sum。幸运的是,这正是Sum()窗口函数所做的:
WITH transfers AS(
SELECT i, random()-0.3 AS quantity FROM generate_series(1,100) as i
)
SELECT i, quantity, sum(quantity) OVER (ORDER BY i) from transfers;发布于 2016-01-06 20:13:48
我想,看看这个问题,你唯一需要的就是计算一个累积的总和。
若要计算累积和,请使用以下查询:
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行的结果,那么您需要一种递归方法。
https://stackoverflow.com/questions/34640302
复制相似问题