Det du ønsker er lag(ignore nulls)
. Her er en måde at gøre, hvad du vil, ved at bruge to vinduesfunktioner. Den første definerer grupperingen for NULL
værdier, og den anden tildeler værdien:
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;
Du kan også gøre dette uden underforespørgsler ved at bruge arrays. Som udgangspunkt skal du tage det sidste element, der ikke tæller 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;
Her er en db<>violin.