-- 变成按时间排序的长表 with time_line as ( select t1.course_id, course_name, dt, cnt from course_tb right join (select user_id, course_id, in_datetime as dt, 1 as cnt from attend_tb UNION ALL select user_id, course_id, out_datetime as dt, -1 as cnt from attend_tb) t1 on course_tb.course_id = t1.course_id ), ...