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
运用实时的思想,通过窗口函数,实现离线转实时处理(类似)
不知道还有没有更好的方法,这个方法的就是加载的数据太多了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)