hivesql练习_同时在线人数问题
现有各直播间的用户访问记录表(live_events)如下,表中每行数据表达的信息为,一个用户何时进入了一个直播间,又在何时离开了该直播间。
user_id (用户id) | live_id (直播间id) | in_datetime (进入直播间的时间) | out_datetime (离开直播间的时间) |
---|---|---|---|
100 | 1 | 2021-12-1 19:30:00 | 2021-12-1 19:53:00 |
100 | 2 | 2021-12-1 21:01:00 | 2021-12-1 22:00:00 |
101 | 1 | 2021-12-1 19:05:00 | 2021-12-1 20:55:00 |
现要求统计各直播间最大同时在线人数,期望结果如下:
live_id <int> (直播id) | max_user_count <int> (最大人数) |
---|---|
1 | 4 |
2 | 3 |
3 | 2 |
解答:
1 with tt as ( 2 SELECT 3 live_id, in_datetime dt, 1 flag --定义登入标识 4 FROM 5 live_events 6 union all 7 SELECT 8 live_id, out_datetime dt, -1 flag --定义登出标识 9 FROM 10 live_events 11 ), 12 tt1 as( 13 select live_id, dt, sum(flag) over(partition by live_id order by dt) user_count --当前时间的在线人数 14 from tt 15 ) 16 select live_id, max(user_count) max_user_count 17 from 18 tt1 19 group by live_id