在Redshift / PostgreSQL中使用Last_Value窗口函数

时间:2019-03-16 01:25:47

标签: sql amazon-redshift

我有以下查询:

select
    x.value1,
    x.value2,
    y,
    last_value(y ignore nulls)
          over (order by x.value1, x.value2 rows unbounded preceding) as val

from table t

对于下表,

value1.x1   value2.x2    3
value1.x2   value2.x2
value1.x3   value2.x3    5
value1.x4   value2.x4
value1.x5   value2.x5
value1.x6   value2.x6    7
value1.x7   value2.x7

查询给出了输出

value1.x1   value2.x2    3     3
value1.x2   value2.x2          3
value1.x3   value2.x3    5     5
value1.x4   value2.x4          5
value1.x5   value2.x5          5
value1.x6   value2.x6    7     7
value1.x7   value2.x7

它正在正确地复制值,直到最后一行。我不确定为什么它没有一直下去。 “行无界的前面”不是正确使用的帧吗?有人可以指出我的错误吗?不知道这是否也适用于MySQL,但我也会对这种解决方案感兴趣。

谢谢!

1 个答案:

答案 0 :(得分:0)

您的代码应按照窗口规范执行所需的操作。但是,另一种方法是使用lag()

select x.value1, x.value2, y,
       (case when y is not null then y
             else lag(y ignore nulls) over (order by x.value1, x.value2)
        end) as val
from table t;