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

Bagaimana menemukan periode waktu yang paling tumpang tindih dengan rentang tanggal

Ada beberapa pendekatan untuk ini. Satu menggunakan subqueries yang berkorelasi. Itu tidak terlalu menyenangkan. Sebagai gantinya, mari gunakan metode penjumlahan kumulatif karena Anda memiliki Oracle.

Kuncinya adalah memulai dengan daftar cap waktu dengan nilai +1 untuk awal dan -1 untuk akhir. Ini mudah:

select t.*
from ((select starttime as thetime, 1 as value from table t) union all
      (select endtime, -1 as value from table t)
     ) t

Sekarang, jumlah kumulatif dari value memberi tahu Anda jumlah tumpang tindih aktif pada waktu tertentu:

select t.*, sum(value) over (order by thetime) as numactives
from ((select starttime as thetime, 1 as value from table t) union all
      (select endtime, -1 as value from table t)
     ) t

Ini memecahkan masalah Anda. Anda mungkin ingin menambahkan order by numactives desc untuk waktu tertentu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. EF 4, cara menambahkan kelas parsial

  2. Oracle SQL cara menulis pernyataan sql yang memverifikasi apakah pengguna di jaringan saya (yaitu teman atau teman dari teman)

  3. Ubah Teks Query Oracle SQL sebelum pengiriman

  4. Oracle - SELECT DENSE_RANK OVER (ORDER BY, SUM, OVER dan PARTITION BY)

  5. ORA-00060:kebuntuan terdeteksi saat menunggu sumber daya