PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL menggunakan nilai dari baris sebelumnya jika tidak ada

Anda dapat menggabungkan fungsi self join dan windows

Menyederhanakan saya mengambil tabel ini dengan nilai sampel ini:

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

Dalam kueri Anda a adalah trunc_u dan b adalah id your Anda .Permintaannya adalah:

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;

Dan hasilnya:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mendapatkan Tanggal dan Waktu Saat Ini (Tanpa Zona Waktu) di PostgreSQL

  2. PostgreSQL:menggunakan kolom terhitung dalam kueri yang sama

  3. Heroku dan Rails:Kesalahan Pemuatan Permata dengan Postgres, namun Ditentukan dalam GEMFILE

  4. Kapan kita bisa menggunakan nomor pengenal alih-alih namanya di PostgreSQL?

  5. Pembaruan ke bidang JSON tidak bertahan ke DB