首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何引用带有窗口函数的输出行?

如何引用带有窗口函数的输出行?
EN

Stack Overflow用户
提问于 2016-01-06 18:36:49
回答 2查看 30关注 0票数 0

假设我有一个带有quantity列的表。

代码语言:javascript
复制
CREATE TABLE transfers (
  user_id integer,
  quantity integer,
  created timestamp default now()
);

我想迭代地使用窗口函数遍历一个分区,但是访问输出行,而不是输入表行。

要访问输入表行,我可以这样做:

代码语言:javascript
复制
SELECT LAG(quantity, 1, 0)
  OVER (PARTITION BY user_id ORDER BY created)
FROM transfers;

我需要访问上一个输出行来计算下一个输出行。如何访问输出中的滞后行?类似于:

代码语言:javascript
复制
CREATE VIEW balance AS
SELECT LAG(balance.total, 1, 0) + quantity AS total
  OVER (PARTITION BY user_id ORDER BY created)
FROM transfers;

编辑

这是一个支持如何访问窗口分区中的上一个输出行的最小示例。我其实不想要一笔钱。

EN

回答 2

Stack Overflow用户

发布于 2016-01-06 19:41:56

似乎您试图计算一个running sum。幸运的是,这正是Sum()窗口函数所做的:

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2016-01-06 20:13:48

我想,看看这个问题,你唯一需要的就是计算一个累积的总和。

若要计算累积和,请使用以下查询:

代码语言:javascript
复制
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行的结果,那么您需要一种递归方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34640302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档