PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL last_value ignoriert Nullen

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.