SQL求平台最大在线人数

题目需求

根据用户登录明细表(user_login_detail),求出平台同时在线最多的人数。

结果如下

cn
7

需要用到的表

用户登录明细表:user_login_detail

user_id(用户id) ip_address(ip地址) login_ts(登录时间) logout_ts(登出时间)
101 180.149.130.161 2021-09-21 08:00:00 2021-09-27 08:30:00
102 120.245.11.2 2021-09-22 09:00:00 2021-09-27 09:30:00
103 27.184.97.3 2021-09-23 10:00:00 2021-09-27 10:30:00

题解:

-- 如果这是实时流数据你会怎么操作?
-- 是不是来一条用户登录数据就 +1 ,用户登出就 -1。
-- 按照这个思路做:
select 
	max(count_people) as cn -- 筛选出最大同时在线人数
from (
  select 
	sum(mark) over (order by `time`) as count_people -- 开窗统计在线人数
  from (
    select 
      login_ts as `time`,
      1 as mark -- 登录操作记为1
    from user_login_detail
    union all -- 进行表合并
    select 
        logout_ts as `time`,
        -1 as mark -- 登出的操作记为-1
    from user_login_detail
  ) t1
) t2

运用实时的思想,通过窗口函数,实现离线转实时处理(类似)
不知道还有没有更好的方法,这个方法的就是加载的数据太多了

posted @ 2023-03-06 11:13  MrSponge  Views(476)  Comments(0Edit  收藏  举报