with a as(
    select
        course_id,
        in_datetime as time,
        1 as diff
    from 
        attend_tb
    union all
    select 
        course_id,
        out_datetime as time,
        -1 as diff
    from 
        attend_tb
),
b as (
    select 
        course_id,
        sum(diff)over(partition by course_id order by time,diff desc) as nums
    from 
        a
),
c as (
    select
        ct.course_id,
        ct.course_name,
        max(b.nums) as max_num
    from
        course_tb as ct
        left join b on b.course_id = ct.course_id
    group by 
        ct.course_id,
        ct.course_name
)
select * from c