我有以下查询:
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,但我也会对这种解决方案感兴趣。
谢谢!
答案 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;