sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL last_value ignorera nollvärden

Det du vill ha är lag(ignore nulls) . Här är ett sätt att göra vad du vill, med hjälp av två fönsterfunktioner. Den första definierar grupperingen för NULL värden och den andra tilldelar värdet:

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 också göra detta utan underfrågor genom att använda arrayer. I grund och botten, ta det sista elementet som inte räknar 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;

Här är en db<>fiol.



  1. Skapa C#-klasser baserade på MySQL-tabellen

  2. Rekommendationer för att stödja både Oracle och SQL Server i samma ASP.NET-app med NHibernate

  3. tidszonsproblem med databasen

  4. Infoga en persisk text i mysql-tabellen