参考前一行(滞后4)

时间:2018-05-13 13:33:48

标签: sql postgresql

我有以下包含4列(qtrs,y,c1372,c5244)的样本数据,这些列是季度数据:

enter image description here

我想在现有值的年增长值中转换列c1372和c5244。这需要将当前行除以当前行/当前行滞后4 -1。

update temp_09.Y_PZZA       
set C1372 = C1372 / LAG(C1372,4) - 1, 
C5244 = C5244 / LAG(C5244,4) - 1, 

但是上述解决方案不起作用。我收到此错误:

[42803] ERROR: cannot use aggregate function in UPDATE

此外,我不确定滞后函数是否是最简单或最强大的解决方案。另请注意,前4行不能引用任何早期行。如果前4行值不变,那就没问题了。

1 个答案:

答案 0 :(得分:0)

我希望使用update进行from查询,如下所示:

update temp_09.Y_PZZA t
    set c1372 = tt.new1372,
        C5244 = tt.new_C5244
    from (select t.*,
                 C1372 / LAG(C1372, 4) over (order by qtrs)  - 1 as new_c1372,
                 C5244 / LAG(C5244, 4) over (order by qtrs) - 1 as new_C5244 
          from temp_09.Y_PZZA t
         ) tt
     where tt.qtrs = t.qtrs;

我不建议覆盖当前值。它们似乎意味着什么。相反,只需添加另一列。事实上,你可以通过视图做你想做的事。

我怀疑您的查询中有其他错误。您的版本应该返回更多错误:

  

42809:窗口函数滞后需要OVER子句

您的代码段中没有聚合函数。

如果是这种情况,我建议你问另一个问题。