【发布时间】:2019-05-14 06:02:51
【问题描述】:
我在一个表中有以下数据:
col1
---
1
2
5
9
10
我想用col1与col1之前的值之差减去1的运行总和来更新表中的col2
col2 = col2.prev + col1 - col1.prev - 1
结果是:
col1 | col2
--------------
1 | 0
2 | 0
5 | 2
9 | 5
10 | 5
我尝试使用窗口函数:
SELECT sum(col1 - lag(col1) OVER (ORDER BY col1) - 1) AS col2 FROM table1
但这是不允许的 - 错误:聚合函数调用不能包含窗口函数调用
还有其他方法可以做到这一点吗?我知道我可以轻松地编写一个函数来循环遍历行,但我从我所读到的内容中得到的印象是,这种方法在大多数情况下效率不高且不鼓励使用。如果我有错误的印象,请纠正我。
【问题讨论】:
-
你能确认COL2中的输出应该是- 00255 OR 00355
-
它是 00255 - 因为 0+5-2-1=2、2+9-5-1=5、5+10-9-1=5,依此类推...
标签: sql postgresql window-functions postgresql-9.6