(1)将每类课程中的所有用户登入时间定义为1,推出时间定义为-1,然后使用集合函数进行拼接,并按照时间进行正向排序 select t1.course_id, t2.user_id, t1.course_name, t2.in_datetime as dt, 1 as uv from course_tb as t1 left join attend_tb as t2 on t1.course_id = t2.course_id union all select t1.course_id, t2.user_id, t1.course_name, t2.out_datetime as dt, -1 as uv from course_tb as t1 left join attend_tb as t2 on t1.course_id = t2.course_id order by 1,4 结果展示: 1 1|102|Python|2021-12-01 19:00:00|1 2 1|101|Python|2021-12-01 19:00:00|1 3 1|100|Python|2021-12-01 19:00:00|1 4 1|104|Python|2021-12-01 19:00:00|1 5 1|102|Python|2021-12-01 19:05:00|-1 6 1|100|Python|2021-12-01 19:28:00|-1 7 1|100|Python|2021-12-01 19:30:00|1 8 1|100|Python|2021-12-01 19:53:00|-1 9 1|101|Python|2021-12-01 20:55:00|-1 10 1|104|Python|2021-12-01 20:59:00|-1 11 2|102|SQL|2021-12-02 18:55:00|1 12 2|104|SQL|2021-12-02 18:57:00|1 13 2|101|SQL|2021-12-02 19:05:00|1 14 2|107|SQL|2021-12-02 19:10:00|1 15 2|107|SQL|2021-12-02 19:18:00|-1 16 2|104|SQL|2021-12-02 20:56:00|-1 17 2|101|SQL|2021-12-02 20:58:00|-1 18 2|102|SQL|2021-12-02 21:00:00|-1 19 3|102|R|2021-12-03 18:58:00|1 20 3|100|R|2021-12-03 19:01:00|1 21 3|108|R|2021-12-03 19:01:00|1 22 3|102|R|2021-12-03 19:05:00|-1 23 3|108|R|2021-12-03 19:56:00|-1 24 3|100|R|2021-12-03 21:00:00|-1 (2)对拼接后按照时间排序的新数据表,求各个时间点(如19:00时刻的总人数)的人数汇总 select a.course_id, a.course_name, a.dt, sum(a.uv) over(partition by a.course_id order by a.dt, a.uv desc) as uv_cnt from (xxx) as a 结果展示: 1 1|Python|2021-12-01 19:00:00|4 2 1|Python|2021-12-01 19:00:00|4 3 1|Python|2021-12-01 19:00:00|4 4 1|Python|2021-12-01 19:00:00|4 5 1|Python|2021-12-01 19:05:00|3 6 1|Python|2021-12-01 19:28:00|2 7 1|Python|2021-12-01 19:30:00|3 8 1|Python|2021-12-01 19:53:00|2 9 1|Python|2021-12-01 20:55:00|1 10 1|Python|2021-12-01 20:59:00|0 11 2|SQL|2021-12-02 18:55:00|1 12 2|SQL|2021-12-02 18:57:00|2 13 2|SQL|2021-12-02 19:05:00|3 14 2|SQL|2021-12-02 19:10:00|4 15 2|SQL|2021-12-02 19:18:00|3 16 2|SQL|2021-12-02 20:56:00|2 17 2|SQL|2021-12-02 20:58:00|1 18 2|SQL|2021-12-02 21:00:00|0 19 3|R|2021-12-03 18:58:00|1 20 3|R|2021-12-03 19:01:00|3 21 3|R|2021-12-03 19:01:00|3 22 3|R|2021-12-03 19:05:00|2 23 3|R|2021-12-03 19:56:00|1 24 3|R|2021-12-03 21:00:00|0 (3)分别按照每个course_id、course_name进行分组,并从刚才的数据表中挑选出《存在最大人数》的时间段,然后将《最大人数》作为结果进行展示 select b.course_id, b.course_name, max(b.uv_cnt) as max_num from (xxx) as b group by 1,2 order by 1 结果展示: 1 Python 4 2 SQL 4 3 R 3