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

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 认为您想以某种方式嵌套 COUNTLAG

使用另一个列名或为该列使用引号:

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

【讨论】:

这不是这里的问题。很抱歉造成混乱

以上是关于使用滞后函数访问当前行值的主要内容,如果未能解决你的问题,请参考以下文章

Oracle sql 数学计算使用当前和前一个行值

如何计算行值相对于其他行值的差异总和,特别是使用窗口函数不包括该行

用python做时间序列预测六:相关函数图偏相关函数图滞后图

用python做时间序列预测六:相关函数图偏相关函数图滞后图

Python:创建新列,计算当前日期和滞后日期之间的天数

使用滞后访问mysql中的前一行值