with tb1 as( select user_id, course_id, in_datetime dt, 1 as diff from attend_tb union all select user_id, course_id, out_datetime dt, -1 as diff from attend_tb) select course_id, course_name, max(num) from( select course_id, course_name, sum(diff)over(partition by course_id order by dt, diff desc) num from tb1 left join course_tb using(course_id) ) tb2 group by course_id, course_name order by course_id