Der er flere tilgange til dette. Man bruger korrelerede underforespørgsler. Det er ikke særlig sjovt. Lad os i stedet bruge den kumulative summetode, fordi du har Oracle.
Nøglen er at starte med en liste over tidsstempler med en værdi på +1 for en start og -1 for en afslutning. Dette er nemt:
select t.*
from ((select starttime as thetime, 1 as value from table t) union all
(select endtime, -1 as value from table t)
) t
Nu, den kumulative sum af value
fortæller dig antallet af aktive overlapninger på et givet tidspunkt:
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
Dette løser dit problem. Du vil sandsynligvis tilføje en order by numactives desc
til de specifikke tidspunkter.