# 求最大同时在线人数
# 经典瞬时人数计算
# 临时表0, 将进入和离开时间分别编码为1,-1 然后组合在一起
WITH temp_0 AS(
SELECT course_id, in_datetime _time, 1 cnt
FROM attend_tb
UNION ALL
SELECT course_id, out_datetime _time, -1 cnt
FROM attend_tb
)
# 取最值
SELECT course_id, course_name, MAX(num) max_num
FROM(
# 子查询根据课程id分页,根据时间和计数字段排序,先增后减,得到每个课程的瞬时在线人数
SELECT course_id, SUM(cnt) OVER(PARTITION BY course_id ORDER BY _time, cnt DESC) num
FROM temp_0
) a
JOIN course_tb USING(course_id)
GROUP BY course_id, course_name
ORDER BY course_id

京公网安备 11010502036488号