-- 1. 将播放记录的起止时间(start/end)拆解为+1和-1的离散事件流。 WITH events AS ( SELECT cid, start_time as event_time, 1 as event_type FROM play_record_tb UNION ALL SELECT cid, end_time as event_time, -1 as event_type FROM play_record_tb ), -- 2. 利用窗口函数计算每个时间点的并发数。 running_totals AS ( SELECT cid, event_time, -- 通过累加事件(+1/-1),计算出当前时间点的并发总数。 SUM(event_type) OVER ( PARTITION BY cid -- 关键排序:确保同一时刻的+1事件在-1事件之前处理,以捕捉到正确的峰值。 ORDER BY event_time, event_type DESC ROWS UNBOUNDED PRECEDING ) as concurrent_count FROM events ), -- 3. 聚合得到每个视频的历史最大并发数。 max_concurrent AS ( SELECT cid, MAX(concurrent_count) as max_count FROM running_totals GROUP BY cid ) -- 4. 输出Top 3结果。 SELECT cid, FORMAT(max_count, 3) as max_concurrent_count FROM max_concurrent ORDER BY max_count DESC, cid LIMIT 3;