sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL använd värde från föregående rad om det saknas

Du kan blanda en självanslutning och Windows-funktioner

Förenklat tar jag den här tabellen med dessa exempelvärden:

create table t ( a int, b int);    
insert into t values 
( 1, 1),
( 2, Null),
( 3, Null),
( 4, 2 ),
( 5, Null),
( 6, Null);

I din fråga a är trunc_u och b är ditt id .Frågan är:

with cte as (    
    select 
      t1.a, 
      coalesce( t1.b, t2.b, 0) as b,
      rank() OVER 
       (PARTITION BY t1.a ORDER BY t2.a DESC) as pos
    from t t1 
    left outer join t t2
      on t2.b is not null and
         t2.a < t1.a    
)
select a, b
from cte
where pos = 1;

Och resultat:

| A | B |
---------
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 2 |
| 6 | 2 |


  1. Göra ändringar i flera poster baserat på ändring av en enda post med SQL

  2. PHP och Postgres:fångar fel?

  3. Hur man undviker inlåsning av PostgreSQL Cloud-leverantörer

  4. Är funktionsnamn i PostgreSQL skiftlägesokänsliga?