with t0 as( select user_id, a.course_id, in_datetime, out_datetime,course_name from attend_tb a join course_tb c on a.course_id = c.course_id ), t1 as( select user_id,course_id,course_name, in_datetime time, 1 mark from t0 union all select user_id,course_id,course_name, out_datetime time, -1 mark from t0 ), t2 as( select *, sum(mark) over (partition by course_id order by time rows between unbounded preceding and current row) num from t1 order by course_id,time, user_id ) select course_id,course_name,max(num) max_num from t2 group by course_id,course_name order by course_id