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

Cara menemukan catatan dengan rentang tanggal yang tumpang tindih secara rekursif di Oracle DB

Anda dapat menetapkan pengidentifikasi grup ke rekaman. Idenya adalah untuk menemukan record yang tidak tumpang tindih, dan menggunakannya sebagai awal dari sebuah grup.

Berikut ini menugaskan grup ke setiap record:

  select t.*, sum(group_start) over (order by dstart) as grp
  from (select t.*,
               (case when not exists (select 1
                                      from t t2
                                      where t2.dstart < t.dstart and t2.dend >= t.dstart
                                     )
                     then 1 else 0
                end) group_start
        from t
       ) t

Jika Anda hanya menginginkan grup untuk record tertentu maka ada beberapa cara, seperti:

with overlaps as (
      <query above>
     )
select o.*
from overlaps o
where o.grp = (select o2.grp from overlaps o2 where o2.id = ???);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa Anda tidak dapat menggunakan OR atau IN dengan operasi OUTER JOIN?

  2. Memahami perilaku fungsi sisa () di Oracle

  3. berapa banyak CPU yang dikonsumsi sesi pada waktu tertentu di Oracle

  4. Oracle MERGE:hanya NOT MATCHED yang dipicu

  5. Pernyataan SQL untuk menggunakan daftar nilai yang telah ditentukan sebelumnya sebagai tabel SQL