【发布时间】:2016-11-24 18:36:44
【问题描述】:
我想得到之前(滞后)的计算值?
id | value
-------|-------
1 | 1
2 | 3
3 | 5
4 | 7
5 | 9
我想要实现的是:
id | value | new value
-------|-------|-----------
1 | 1 | 10 <-- 1 * lag(new_value)
2 | 3 | 30 <-- 3 * lag(new_value)
3 | 5 | 150 <-- 5 * lag(new_value)
4 | 7 | 1050 <-- 7 * lag(new_value)
5 | 9 | 9450 <-- 9 * lag(new_value)
我尝试过的:
SELECT value,
COALESCE(lag(new_value) OVER () * value, 10) AS new_value
FROM table
错误:
错误:列“new_value”不存在
【问题讨论】:
-
貌似是递归计算吧?
-
@JuanCarlosOropeza 是的,伙计。我应该在这里使用什么?递归 CTE 还是横向连接?
-
递归 CTE。应该很容易。如果需要更多帮助,请告诉我postgresql.org/docs/9.4/static/queries-with.html
-
你的价值观是
{1,2,3,4,5},然后变成{1,3,5,7,9}? -
不相关,但是:你不需要
coalesce()有滞后。您可以将默认值直接传递给lag()函数:lag(some_col, 1, 0)
标签: postgresql window-functions