我有以下包含4列(qtrs,y,c1372,c5244)的样本数据,这些列是季度数据:
我想在现有值的年增长值中转换列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行值不变,那就没问题了。
答案 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子句
您的代码段中没有聚合函数。
如果是这种情况,我建议你问另一个问题。