PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL last_value ignora i null

Quello che vuoi è lag(ignore nulls) . Ecco un modo per fare quello che vuoi, usando due funzioni della finestra. Il primo definisce il raggruppamento per il NULL valori e il secondo assegna il valore:

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;

Puoi anche farlo senza sottoquery usando gli array. Fondamentalmente, prendi l'ultimo elemento senza contare 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;

Qui è un db<>violino.