使用滞后函数访问当前行值
Posted
技术标签:
【中文标题】使用滞后函数访问当前行值【英文标题】:Accessing current row value with lag function 【发布时间】:2016-04-15 21:23:19 【问题描述】:我想计算前一列和当前列之间的差异,并将其设为一个名为increase
的新列。为此,我使用lag
window function。由于不存在前一列,因此未定义第一列的值。我知道第三个参数指定了默认值。但是,这取决于。对于第一行,我想使用另一列的值,例如当前行中的count
之一。这假设增加 0 以计入我需要的第一行。将列名指定为 lag
函数的第三个参数不能正常工作,使用 0 也不能正常工作。怎么办?我得到了奇怪的结果,例如相当随机的结果,甚至是负数。
SELECT *, mycount - lag(mycount, 1) OVER (ORDER BY id, messtime ASC) AS increase FROM measurements;
窗口函数也不能嵌套:
ERROR: window function calls cannot be nested
【问题讨论】:
请提供一些样本数据(十几行)以及查询该样本数据的正确结果。 【参考方案1】:您的查询还有另一个问题:到目前为止,您的结果是随机顺序的,因此您可能认为您看到的问题并不存在。
将ORDER BY id, messtime
添加到您的查询中以按顺序查看行。现在您可以直接将一行与其前任进行比较。还有问题吗?如果有,具体是哪一个?
SELECT *, "count" - lag("count", 1) OVER (ORDER BY id, messtime) AS increase
FROM measurements
ORDER BY id, messtime;
【讨论】:
【参考方案2】:COUNT
是 SQL 中的保留字。似乎 DBMS 认为您想以某种方式嵌套 COUNT
和 LAG
。
使用另一个列名或为该列使用引号:
SELECT *, "count" - lag("count", 1) OVER
【讨论】:
这不是这里的问题。很抱歉造成混乱以上是关于使用滞后函数访问当前行值的主要内容,如果未能解决你的问题,请参考以下文章
如何计算行值相对于其他行值的差异总和,特别是使用窗口函数不包括该行
用python做时间序列预测六:相关函数图偏相关函数图滞后图