Ce que vous voulez, c'est lag(ignore nulls)
. Voici une façon de faire ce que vous voulez, en utilisant deux fonctions de fenêtre. Le premier définit le regroupement pour le NULL
valeurs et la seconde attribue la valeur :
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;
Vous pouvez également le faire sans sous-requêtes en utilisant des tableaux. En gros, prenez le dernier élément sans compter 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;
ici est un db<>violon.