Có một số cách tiếp cận để giải quyết vấn đề này. Một sử dụng các truy vấn con tương quan. Điều đó không vui lắm. Thay vào đó, hãy sử dụng phương pháp tính tổng tích lũy vì bạn có Oracle.
Điều quan trọng là bắt đầu với danh sách các dấu thời gian có giá trị +1 cho phần bắt đầu và -1 cho phần kết thúc. Điều này thật dễ dàng:
select t.*
from ((select starttime as thetime, 1 as value from table t) union all
(select endtime, -1 as value from table t)
) t
Bây giờ, tổng tích lũy của giá trị value
cho bạn biết số lượng chồng chéo đang hoạt động tại bất kỳ thời điểm nào:
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
Điều này giải quyết vấn đề của bạn. Bạn có thể muốn thêm một đơn đặt hàng order by numactives desc
cho thời gian cụ thể.