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.