sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL last_value negeer nulls

Wat je wilt is lag(ignore nulls) . Hier is een manier om te doen wat u wilt, met behulp van twee vensterfuncties. De eerste definieert de groepering voor de NULL waarden en de tweede wijst de waarde toe:

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;

U kunt dit ook doen zonder subquery's door arrays te gebruiken. Kortom, neem het laatste element niet meegeteld 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;

Hier is een db<>viool.



  1. Probleem met machtigingen in SSMS:de SELECT-machtiging is geweigerd voor het object 'extended_properties', database 'mssqlsystem_resource', ... Fout 229)

  2. Filter tussen twee datums MYSQL

  3. Op zoek naar telefoonnummer met een minteken, zoals 123-456789

  4. Reactietijd op verzonden bericht controleren - mogelijk met alleen SQL?