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

PostgreSQL last_value ignorer nulls

Det du ønsker er lag(ignore nulls) . Her er en måde at gøre, hvad du vil, ved at bruge to vinduesfunktioner. Den første definerer grupperingen for NULL værdier, og den anden tildeler værdien:

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;

Du kan også gøre dette uden underforespørgsler ved at bruge arrays. Som udgangspunkt skal du tage det sidste element, der ikke tæller 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;

Her er en db<>violin.



  1. Gemmer jdbc-datasættet alle rækker i jvm-hukommelsen

  2. SQL tæller specifik værdi over flere kolonner og rækker

  3. Hvorfor fungerer min hvis-erklæring ikke som jeg forventer?

  4. brug af fjederstøvleprofiler med liquibase changeset context attribut til at administrere changset scope