WITH time_points AS (
-- 收集所有可能的关键时间点
SELECT DISTINCT cid, start_time as check_time
FROM play_record_tb
UNION
SELECT DISTINCT cid, end_time as check_time
FROM play_record_tb
),
concurrent_at_each_time AS (
-- 对每个时间点计算该时刻的并发数
SELECT
tp.cid,
tp.check_time,
COUNT(pr.id) as concurrent_count
FROM time_points tp
LEFT JOIN play_record_tb pr ON tp.cid = pr.cid
AND pr.start_time <= tp.check_time
AND pr.end_time >= tp.check_time
GROUP BY tp.cid, tp.check_time
),
max_concurrent AS (
-- 找出每个视频的最大并发数
SELECT
cid,
MAX(concurrent_count) as max_count
FROM concurrent_at_each_time
GROUP BY cid
)
SELECT
cid,
FORMAT(max_count, 3) as max_concurrent_count
FROM max_concurrent
ORDER BY max_count DESC, cid
LIMIT 3;