使用滞后函数访问当前行值

时间:2016-04-15 21:23:20

标签: postgresql lag window-functions

我想计算上一列和当前列之间的差异,并将其设为名为increase的新列。为此,我正在使用lag window function。由于不存在先前的列,因此未定义第一列的值。我知道第3个参数指定了默认值。但是,这取决于。对于第一行,我想使用另一列的值,例如来自当前行的count之一。这假设0增加到第一行的计数,这是我需要的。将列名指定为lag函数的第3个参数不能正常工作,也不能使用0.如何才能完成?我得到了一些奇怪的结果,比如随机的结果甚至是负数。

SELECT *, mycount - lag(mycount, 1) OVER (ORDER BY id, messtime ASC) AS increase FROM measurements;

窗口函数也不能嵌套:

ERROR: window function calls cannot be nested

2 个答案:

答案 0 :(得分:1)

您的查询还有另一个问题:到目前为止,您的搜索结果是随机排列的,因此您可能会认为自己看到的问题并不存在。

在查询中添加ORDER BY id, messtime以按顺序查看行。现在,您可以直接将一行与其前一行进行比较。还有问题吗?如果是这样,究竟是哪个?

SELECT *, "count" - lag("count", 1) OVER (ORDER BY id, messtime) AS increase
FROM measurements
ORDER BY id, messtime;

答案 1 :(得分:0)

COUNT是SQL中的保留字。似乎DBMS认为你想以某种方式嵌套COUNTLAG

使用其他列名称或使用列的引号:

SELECT *, "count" - lag("count", 1) OVER