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

PostgreSQL brug værdi fra forrige række, hvis den mangler

Du kan blande en selvtilslutning og Windows-funktioner

Forenklet tager jeg denne tabel med disse eksempelværdier:

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 forespørgsel a er trunc_u og b er dit id .Forespørgslen er:

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;
 

Og resultater:

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

  1. Tips og tricks til at navigere i PostgreSQL-fællesskabet

  2. Få den venstre del af en streng i SQL Server (T-SQL)

  3. Rekursiv forespørgsel i SQL Server

  4. Hvad sender parametre til SQL, og hvorfor har jeg brug for det?