题目
现有各直播间的用户访问记录表(live_events)如下,表中每行数据表达的信息为:一个用户啥时进入了一个直播间,又在啥时离开了该直播间。
user_id (用户id) |
live_id (直播间id) |
in_date (进入直播间的时间) |
out_date (离开直播间的时间) |
1001 |
1 |
2024-02-21 19:30:00 |
2024-02-21 19:53:00 |
1002 |
1 |
2024-02-21 21:01:00 |
2024-02-21 22:00:00 |
1003 |
1 |
2024-02-21 19:36:00 |
2024-02-21 20:53:00 |
1004 |
2 |
2024-02-21 16:30:00 |
2024-02-21 16:53:00 |
1005 |
1 |
2024-02-21 19:51:00 |
2024-02-21 21:53:00 |
现要求统计各直播间最大同时在线人数,期望结果如下:
live_id |
max_users |
1 |
3 |
2 |
1 |
数据
values
(
(1001,1,'2024-02-21 19:30:00','2024-02-21 19:53:00'),
(1002,1,'2024-02-21 21:01:00','2024-02-21 22:00:00'),
(1003,1,'2024-02-21 19:36:00','2024-02-21 20:53:00'),
(1004,2,'2024-02-21 16:30:00','2024-02-21 16:53:00'),
(1005,2,'2024-02-21 19:51:00','2024-02-21 21:53:00')
)
参考
select
live_id,
max(user_count) max_user_count
from
(
select
user_id,
live_id,
sum(user_change) over(partition by live_id order by event_time) user_count
from
(
select user_id,
live_id,
in_time event_time,
1 user_change
from test
union all
select user_id,
live_id,
out_time out_datetime,
-1
from test
)t1
)t2
group by live_id;