Hier zijn verschillende benaderingen voor. Men gebruikt gecorreleerde subquery's. Dat is niet zo leuk. Laten we in plaats daarvan de cumulatieve sommethode gebruiken, omdat je Oracle hebt.
De sleutel is om te beginnen met een lijst met tijdstempels met een waarde van +1 voor een begin en -1 voor een einde. Dit is eenvoudig:
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, de cumulatieve som van de value
vertelt u het aantal actieve overlappingen op een bepaald moment:
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
Dit lost je probleem op. U wilt waarschijnlijk een order by numactives desc
voor de specifieke tijden.