Det du vill ha är lag(ignore nulls)
. Här är ett sätt att göra vad du vill, med hjälp av två fönsterfunktioner. Den första definierar grupperingen för NULL
värden och den andra tilldelar värdet:
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 också göra detta utan underfrågor genom att använda arrayer. I grund och botten, ta det sista elementet som inte räknar 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;
Här är en db<>fiol.