我有以下查询:
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,但我也会对这样的解决方案感兴趣。
谢谢!
您的代码应该根据窗口规范执行您想要的操作。但是,另一种方法是使用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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句