PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL last_value ignore les valeurs nulles

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.