经典sql题(七)查找直播间最大在线人数

使用 SQL 分析房间用户状态变化

本文将详细介绍如何使用 SQL 的窗口函数和聚合函数,分析用户在房间中的状态变化,目标是计算每个房间指定时间段内的最大用户状态。

示例数据

假设我们的数据表包含以下字段:

room_iduser_idlogin_timelogout_time
10112023-03-10 12:05:002023-03-10 12:45:00
10122023-03-10 12:10:002023-03-10 12:50:00
10232023-03-10 12:00:002023-03-10 13:00:00
10242023-03-10 12:30:002023-03-10 13:30:00

第一步:提取事件并标记类型

在这一步,我们将从原始数据中提取每个用户的登录和退出事件,并为每个事件分配一个类型标记(1 表示登录,-1 表示退出)。

提取登录事件
SELECT room_id,user_id,UNIX_TIMESTAMP(login_time) AS event_time,1 AS user_type
FROM table
WHERE FROM_UNIXTIME(UNIX_TIMESTAMP(login_time), '%Y%m%d') = '20230310'AND (HOUR(login_time) BETWEEN 12 AND 13)
结果示例
room_iduser_idevent_timeuser_type
101116153755001
101216153758001
102316153752001
102416153770001
提取退出事件
SELECT room_id,user_id,UNIX_TIMESTAMP(logout_time) AS event_time,-1 AS user_type
FROM table
WHERE FROM_UNIXTIME(UNIX_TIMESTAMP(logout_time), '%Y%m%d') = '20230310'AND (HOUR(logout_time) BETWEEN 12 AND 13)
结果示例
room_iduser_idevent_timeuser_type
10111615377900-1
10121615378200-1
10231615378800-1
10241615379400-1
合并结果

我们将登录和退出事件通过 UNION ALL 合并,以获得完整的事件列表。

SELECT room_id,user_id,event_time,user_type
FROM (-- 登录事件SELECT room_id,user_id,UNIX_TIMESTAMP(login_time) AS event_time,1 AS user_typeFROM tableWHERE FROM_UNIXTIME(UNIX_TIMESTAMP(login_time), '%Y%m%d') = '20230310'AND (HOUR(login_time) BETWEEN 12 AND 13)UNION ALL-- 退出事件SELECT room_id,user_id,UNIX_TIMESTAMP(logout_time) AS event_time,-1 AS user_typeFROM tableWHERE FROM_UNIXTIME(UNIX_TIMESTAMP(logout_time), '%Y%m%d') = '20230310'AND (HOUR(logout_time) BETWEEN 12 AND 13)
) AS events
合并结果示例
room_iduser_idevent_timeuser_type
101116153755001
101216153758001
102316153752001
102416153770001
10111615377900-1
10121615378200-1
10231615378800-1
10241615379400-1

第二步:计算累积用户状态

使用窗口函数累积计算用户状态。

SELECTroom_id,user_id,user_type,SUM(user_type) OVER (PARTITION BY room_id ORDER BY event_time) AS status
FROM (-- 上一步的查询
) AS events

结果示例

room_iduser_iduser_typestatus
101111
101212
1011-11
1012-10
102311
102412
1023-11
1024-10

第三步:求最大状态

通过聚合函数求每个房间的最大状态。

SELECTroom_id,MAX(status) AS max_status
FROM (-- 上一步的状态查询
) AS status_calculation
GROUP BYroom_id;

结果示例

room_idmax_status
1012
1022

解析

  • 数据准备:合并登录和退出事件,标记事件类型。
  • 计算状态:使用 SUM() OVER 计算累积状态。
  • 求最大状态:通过 MAX(status) 获取最大用户状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/53522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8.进销存系统(基于springboot的进销存系统)

目录 1.系统的受众说明 2.开发技术与环境配置 2.1 SpringBoot框架 2.2 Java语言简介 2.3 MySQL环境配置 2.4 idea介绍 2.5 mysql数据库介绍 2.6 B/S架构 3.系统分析与设计 3.1 可行性分析 3.1.1 技术可行性 3.1.2 操作可行性 3.1.3经济可行性 3.4.1 数据库…

第159天:安全开发-Python-协议库爆破FTPSSHRedisSMTPMYSQL等

目录 案例一: Python-文件传输爆破-ftplib 库操作 ftp 协议 ​案例二: Python-数据库爆破-redis 库操作redis 协议 案例三:Python-邮件爆破-smtplib 库操作 smtp 协议 案例四:Python-登录爆破-paramiko库操作ssh协议 案例五&#xff1a…

andriod studio 学习1

res —> layout: 放置布局文件 res —> drawable-xhdpi: 放置图标、图片文件 res —> values: 放置style、字符串、颜色等资源 LinearLayout: 线性布局 RelativeLayout:相对布局 布局相关设置:padding 、background TextView:展示文本 android…

Web 服务器介绍 | 通过 Tomcat 说明其作用

1. 什么是 Web 服务器? Web服务器是一种用于存储、处理和提供网页或Web应用程序的服务器。它通过HTTP(超文本传输协议)与客户端(通常是浏览器)进行通信,接收客户端的请求(如网页请求&#xff0…

【RPA私教课:UIPath】RPA 赋能科技企业,登录时验证码自动截取

在某科技型企业里,专门设置了一个验证码接收系统。每当用户进行登录操作时,都必须从这个系统中抓取最新的登录验证码,以确保登录的安全性。 具体需求如下: 客户会预先在表格中妥善保存众多的账户和密码。当 RPA 机器人在业务系统…

Vue使用axios实现Ajax请求

1、什么是 axios 在实际开发过程中,浏览器通常需要和服务器端进行数据交互。而 Vue.js 并未提供与服务器端通信的接口。从 Vue.js 2.0 版本之后,官方推荐使用 axios 来实现 Ajax 请求。axios 是一个基于 promise 的 HTTP 客户端。 关于 promise 的详细介…

从零开始讲DDR(3)——DDRC与DDRPYH

一、DDR的使用 在之前的文章中我们介绍了DDR的基本概念,但是DDR内存的操作不仅仅是简单的数据读取和写入,它包括许多时序要求和信号调度。为了让DDR内存有效运作,系统需要在逻辑层和物理层之间进行大量的协作。我们拿出一张DDR的操作简化状态…

rfid超高频手持移动终端的性能特点

超高频手持移动终端的工作频率范围通常在860 MHz至960 MHz之间,具体频段根据不同的地区和国家有所不同,下面我们就一起来了解一下,超高频手持移动终端的性能特点。 超高频手持移动终端的性能特点 高效率与高速度:超高频手持移动…

付费计量应用过程(Payment Metering Application process)

The Payment Metering Application process is the combination of the business and support processes as the resultant interactions between the business and support functions, which thus describes the dynamic behavior of the system as a whole. 付费计量…

docker构建java镜像,运行镜像出现日志 no main manifest attribute, in /xxx.jar

背景 本文主要是一个随笔,记录一下出现"no main manifest attribute"的解决办法 问题原因 主要是近期在构建一个镜像,在镜像构建成功后,运行一直提示"no main manifest attribute",当时还在想,是不是Dockerfile写错了,后来仔细检查了一下,发现是…

C++ std::any升级为SafeAny

std::any测试 #include <any>class A { public:int8_t a; };int main(int argc, char* argv[]) {std::any num((int8_t)42);auto a std::any_cast<A>(num);return 0; }异常&#xff1a; 0x00007FFA9385CD29 处(位于 test.exe 中)有未经处理的异常: Microsoft C 异…

Python中常用字符串方法总结

# isalnum()方法检查字符串是否只包含字母和数字。 is alphanumeric的缩写 s "Hello123" print(s.isalnum()) # 输出: True # isalpha()方法检查字符串是否只包含字母。 s "Hello" print(s.isalpha()) # 输出: True# isdigit()方法检查字符串是否只包…

Unity中Rigidbody 刚体组件和Rigidbody类是什么?

Rigidbody 刚体组件 Rigidbody 是 Unity 中的一个组件&#xff0c;它可以让你的游戏对象像真实世界中的物体一样移动和碰撞。想象一下&#xff0c;你有一个小球&#xff0c;你希望它像真实世界中的球一样滚动、弹跳和碰撞&#xff0c;那么你就可以给这个小球添加一个 Rigidbod…

国产SSL证书品牌怎么选择?

有人在歪曲大型央国企“信创化”与数字化转型建设思路&#xff0c;为了自身的利益开始造谣一些虚假传播信息国外SSL证书不安全问题&#xff0c;然而国外的SSL证书每个上网用户都在使用&#xff0c;然而发布虚假广告的一些人实际上是换了个马甲贴个名字就叫国产SSL证书了&#x…

【农信网-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

初探IT世界:从基础到未来

初探IT世界&#xff1a;从基础到未来 1. 引言 随着科技的不断发展&#xff0c;IT&#xff08;信息技术&#xff09;已经成为全球经济的支柱之一。从软件开发、网络安全到数据分析和人工智能&#xff0c;IT 领域为我们的日常生活提供了许多不可或缺的技术服务。无论你是初学者…

Django框架全面指南

Django是一个高级的Python Web框架,它鼓励快速开发和清晰、实用的设计。本指南将全面介绍Django的核心概念和使用方法。 1. Django简介 Django遵循"batteries included"哲学,提供了Web开发所需的几乎所有功能。它的主要特点包括: ORM(对象关系映射)URL路由模板…

【QT】重载信号Connect链接使用方式

有一些Widget有重载的信号&#xff0c;比如QComboBox&#xff1a; void currentIndexChanged(int index) void currentTextChanged(const QString &text)在连接信号槽的时候&#xff0c;需要做一些处理&#xff0c;要表明具体连接的是哪个类型的信号&#xff0c;否则会报错…

无线安全(WiFi)

免责声明:本文仅做分享!!! 目录 WEP简介 WPA简介 安全类型 密钥交换 PMK PTK 4次握手 WPA攻击原理 网卡选购 攻击姿态 1-暴力破解 脚本工具 字典 2-Airgeddon 破解 3-KRACK漏洞 4-Rough AP 攻击 5-wifi钓鱼 6-wifite 其他 WEP简介 WEP是WiredEquivalentPri…

反编译 AndroidManifest.xml文件-android反编译技术

一、安卓打包后目录 想要查看原来版本配置和关联信息&#xff0c;被打包了&#xff0c;这时候需要工具 AXMLPrinter2.jar 二、反编译环境要求 序号软件说明1java电脑得有java环境2AXMLPrinter2.jarapk中xml解析文件 三、反编译指令 java -jar AXMLPrinter2.jar "C:\Us…