参考相似题目:SQL88 输出播放量最高的视频-CSDN博客
思路完全一样。。
sql
WITH
-- 生成所有事件点(开始+1,结束-1)
events AS (
SELECT
course_id,
in_datetime AS event_time,
1 AS event_type
FROM
attend_tb
UNION ALL
SELECT
course_id,
out_datetime AS event_time,
-1 AS event_type
FROM
attend_tb
),
-- 按时间排序并计算累计同时播放数
running_counts AS (
SELECT
course_id,
event_time,
SUM(SUM(event_type)) OVER (
PARTITION BY
course_id
ORDER BY
event_time ROWS UNBOUNDED PRECEDING
) AS concurrent_play
FROM
events
GROUP BY
course_id,
event_time
),
-- 找出每个视频的最大同时播放数
max_concurrent AS (
SELECT
course_id,
MAX(concurrent_play) AS max_num
FROM
running_counts
GROUP BY
course_id
)
SELECT
course_id,
course_name,
max_num
FROM
max_concurrent
join course_tb using (course_id)
ORDER BY
course_id