【问题标题】: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

【问题讨论】:

  • 请提供一些样本数据(十几行)以及查询该样本数据的正确结果。

标签: postgresql lag window-functions


【解决方案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 
    

    【讨论】:

    • 这不是这里的问题。很抱歉造成混乱
    猜你喜欢
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2021-06-20
    相关资源
    最近更新 更多