Was Sie wollen, ist lag(ignore nulls)
. Hier ist eine Möglichkeit, das zu tun, was Sie wollen, indem Sie zwei Fensterfunktionen verwenden. Die erste definiert die Gruppierung für NULL
Werte und die zweite weist den Wert zu:
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;
Sie können dies auch ohne Unterabfragen tun, indem Sie Arrays verwenden. Nehmen Sie grundsätzlich das letzte Element, das NULL
nicht zählt 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 ist eine db<>Geige.