Quello che vuoi è lag(ignore nulls)
. Ecco un modo per fare quello che vuoi, usando due funzioni della finestra. Il primo definisce il raggruppamento per il NULL
valori e il secondo assegna il valore:
select idx, value, coalesce(value, max(value) over (partition by grp))
from (select b.*, count(value) over (order by idx) as grp
from base b
) b
order by idx;
Puoi anche farlo senza sottoquery usando gli array. Fondamentalmente, prendi l'ultimo elemento senza contare NULL
s:
select idx, value,
(array_remove(array_agg(value) over (order by idx), null))[count(value) over (order by idx)]
from base b
order by idx;
Qui è un db<>violino.