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