我想计算上一列和当前列之间的差异,并将其设为名为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
答案 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认为你想以某种方式嵌套COUNT
和LAG
。
使用其他列名称或使用列的引号:
SELECT *, "count" - lag("count", 1) OVER