Wat je wilt is lag(ignore nulls)
. Hier is een manier om te doen wat u wilt, met behulp van twee vensterfuncties. De eerste definieert de groepering voor de NULL
waarden en de tweede wijst de waarde toe:
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;
U kunt dit ook doen zonder subquery's door arrays te gebruiken. Kortom, neem het laatste element niet meegeteld 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;
Hier is een db<>viool.