如何按顺序取前一个非空值?
How to take previous non-null value in sequence?
DB 是 Presto。假设我有一个 table {id dim1, dim2, seq, value}
。 seq
是 value
的序列号,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
。
DB 是 Presto。假设我有一个 table {id dim1, dim2, seq, value}
。 seq
是 value
的序列号,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
。