-- 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;