Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Gabungkan dua tabel dan temukan tanggal dan Kesenjangan yang tumpang tindih

Kueri ini, menggunakan lead() analitik melakukan pekerjaan. Kolom note menunjukkan jika baris berasal dari data Anda atau jika ada celah yang hilang:

select id, d1, d2, case dir when 3 then 'GAP' end note 
  from (
    select id, 
           case when dir = 2 
                 and lead(dir) over (partition by id order by dt) = 1
                 and lead(dt) over (partition by id order by dt) <> dt + 1
                then dt + 1 
                else dt
           end d1,
           case when dir = 2 
                 and lead(dir) over (partition by id order by dt) = 1
                 and lead(dt) over (partition by id order by dt) <> dt + 1
                then 3 
                else dir
           end dir,
           case when lead(dir) over (partition by id order by dt) = 1 
                then lead(dt)  over (partition by id order by dt) - 1
                else lead(dt)  over (partition by id order by dt) 
            end d2
      from (
        select * from a unpivot (dt for dir in (validfrom as 1, validto as 2)) union 
        select * from b unpivot (dt for dir in (validfrom as 1, validto as 2)) ) )
  where dir in (1, 3)

Pada awalnya data tidak dipivot hanya untuk memiliki semua tanggal dalam satu kolom, lebih mudah untuk analitik lebih lanjut. Union menghapus nilai yang digandakan. Kolom dir menginformasikan apakah ini from atau to tanggal. Kemudian lead logika diterapkan, tergantung pada jenis arah ini. Saya pikir ini bisa disederhanakan :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jumlah SQL berdasarkan grup

  2. Periksa kata sandi pengguna valid atau tidak di plsql

  3. Menggunakan Oracle JDeveloper 12c dengan Oracle Database, Bagian 1

  4. Soundex dengan angka sebagai parameter String

  5. EF 5 dengan oracle edmx StoreGeneratedPattern=Masalah identitas