如何按顺序取前一个非空值?

How to take previous non-null value in sequence?

DB 是 Presto。假设我有一个 table {id dim1, dim2, seq, value}seqvalue 的序列号,value 包含 NULL。我有:

select
id,
dim1,
dim2,
seq,
value,
"value_backfilled" -- Want to compute this
from table
group by id, dim1, dim2
order by id, dim1, dim2, seq

在 select 中,我希望使用序列中最后一个非空值进行“回填”value。 例如,在特定分组中,values 是 [1, null, null, null, 2, null, null, 3, null, null, null],我希望它是 [1, 1, 1 , 1, 2, 2, 2, 3, 3, 3, 3]

Presto 支持 IGNORE NULLS,因此您似乎想要:

select lag(value ignore nulls) over (order by id)

如果数值一直在增加,也可以使用max():

select max(value) over (order by id)

注意:如果您想要每个维度的组合,那么您可以添加 partition by