SQL同时在线问题的解法

news2024/9/22 1:28:16

前言
同时在线相关的问题,在很多行业中也经常出现,比如:

  • 统计同时最大主播数量
  • 统计同时最大在线人数
  • 统计同时最大打车人数

很多人看到这类题,一脸懵逼,甚至连题意都看不懂,但是这道题是面试题中的常客,需要格外关注,尤其是互联网大厂喜欢考察,下面以统计某视频app同时在线最大主播数量为例

数据准备
1,2022-10-09 12:12:12,2022-10-09 18:12:12
2,2022-10-09 13:12:12,2022-10-09 16:12:12
3,2022-10-09 13:15:12,2022-10-09 20:12:12
4,2022-10-09 15:12:12,2022-10-09 16:12:12
5,2022-10-09 15:18:12,2022-10-09 20:12:12
1,2022-10-09 20:12:12,2022-10-09 23:12:12
6,2022-10-09 21:12:12,2022-10-09 23:15:12
7,2022-10-09 22:12:12,2022-10-09 23:10:12

共三列,第一列主播id、第二列上线时间、第三列下线时间

思路分析

同时在线的含义:同一时间点(一般精确到秒)在线。
最大人数:每秒都有新上线和下线的主播,需要求出最大的那一秒的人数

 

利用开窗函数累加

基本思想:上线一人加1,下线一人减1
代码思路:

  1. 将数据进行拆分,开播的记录标为 1,关播的记录记为-1,然后union在一起
  2. 将数据按照时间进行升序排序,然后对上下线标记的字段按时间顺序累加求和
  3. 累加的最大值就是同时在线的最多人数

代码如下:

select id, class, max(b.curr_online_cnt) from(
	SELECT a.id,a.class,a.tt,a.flag,sum(a.flag) over (partition by class ORDER BY a.tt) AS curr_online_cnt FROM(
		SELECT id,class,begintime AS tt,1 AS flag FROM view1
		UNION ALL
		SELECT id,class,endtime AS tt,-1 AS flag FROM view1
	)a ORDER BY id
)b GROUP BY class;

SQL窗口函数OVER用法整理
OVER的定义
OVER用于为行定义一个窗口,它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。

语法

OVER ( [ PARTITION BY column ] [ ORDER BY culumn ] [ROWS|RANGE BETWEEN 边界规则1 and 边界规则2])


PARTITION BY 子句进行分组;
ORDER BY 子句进行排序;
ROWS|RANGE 框架是对窗口进行进一步的分区,框架有两种范围限定方式:一种是使用ROWS子句,通过指定当前行之前或之后的固定数目的行来限制分区中的行数;另一种是RANGE子句,按照排序列的当前值,根据相同值来确定分区中的行数。
窗口函数OVER()指定一组行,开窗函数计算从窗口函数输出的结果集中各行的值。

RANGE表示按照值的范围进行范围的定义,而ROWS表示按照行的范围进行范围的定义;边界规则的可取值见下表

在这里插入图片描述
用法
OVER开窗函数必须与聚合函数或排序函数一起使用,聚合函数一般指SUM(),MAX(),MIN,COUNT(),AVG()等常见函数。排序函数一般指RANK(),ROW_NUMBER(),DENSE_RANK(),NTILE()等。

 

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

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

相关文章

SAP FICO CO-PA(获利分析会计)简介

一、概念信息 1、目标 CO-PA的目标:确定市场段的获利能力。 其中市场段就是一些指标的组合,比如客户A,加上产品1就可以是一个获利分析段。 分析各个获利分析段的贡献边际,为后续销售决策提供支持(主要与…

4、PyCharm中配置PyQt5-tools

1、 配置Qt Designer Workint directory:$FileDir$ 2、配置PyUIC Arguments:$FileName$ -o $FileNameWithoutExtension$.py Workint directory:$FileDir$ 3、配置PyRcc Arguments:$FileName$ -o $FileNameWithoutExtension$_rc.…

Linux常用命令——time命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) time 统计给定命令所花费的总时间 补充说明 time命令用于统计给定命令所花费的总时间。 语法 time(参数)参数 指令:指定需要运行的额指令及其参数。 实例 当测试一个程序或比较不同算法时&…

【进阶】Spring Boot配置文件(.properties提示有问题版)

努力经营当下,直至未来明朗! 文章目录一、配置文件作用二、配置文件的格式三、properties配置文件说明1. properties 基本语法2. 读取配置文件3. properties缺点分析四、 yml配置文件说明1. yml基本语法2. yml使用进阶3. 注意:value值加单双引…

即时通讯开发之TCP 交互数据流、成块数据流

目前建立在 TCP 协议上的网络协议特别多,有 telnet,ssh,有 ftp,有 http 等等。 这些协议又可以根据数据吞吐量来大致分成两大类: 交互数据类型:例如 telnet,ssh,这种类型的协议在大多数情况下只是做小流量的数据交换,比如说按一下键盘,回显一些文 字等等。 数据…

【JavaScript】常见的事件(鼠标、键盘、表单等)

💻【JavaScript】常见的事件 🏠专栏:JavaScript 👀个人主页:繁星学编程🍁 🧑个人简介:一个不断提高自我的平凡人🚀 🔊分享方向:目前主攻前端&…

Xilinx 7系列FPGA之Artix-7产品简介

数字化革命改变了对新手和有丰富经验的 FPGA 设计人员的期望。为了在航空航天和国防、通信基础设施、医疗、工业和消费电子等对成本敏感的市场中竞争,需要在广泛的密度范围内提供强大的高性能功能组合。在不牺牲性能的情况下,开发人员必须能够扩展使用模…

python和netlogo软件模拟病毒传播仿真模型(一)

目前国内在网络舆情仿真建模中所使用的仿真平台主要有 Netlogo、Anylogic、Matlab、Vensim 等,netlogo软件是一款比较通用的。 但是他是由logo语言构成,语言逻辑很让人抓马。 这里python 中的mesa可以实现其中一部分,这里看一下病毒传播仿真模…

WPF 笔记3——在XAML中给对象属性赋值

看B站刘铁猛老师视频学习WPF XAML语言是从xml文件派生而来,是声明式语言,一个标签就表示声明了一个对象。 对象的值可以存储在对象的字段中,也可存储在对象的属性中; 通过给对象的属性赋值,可以在赋值时检查值的合法…

Redis6学习笔记【part2】基本数据类型与常用命令

一.单线程多路IO复用技术 Redis是单线程多路IO复用技术。多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用 select 和 poll 函数,传入多个文件描述符,如果有一个文件描述符就绪,则…

【make、makefile】

前言 打怪升级第:26天 | make、Makefile make是一条命令,Makefile是一个文件, make是一个命令工具,是一个解释Makefile文件中指令的命令工具。 makefile是一个围绕依赖关系和依赖方法构造的一个自动化编程工具, 一个…

博客部署教程

1:安装Docker yum install -y yum-utils device-mapper-persistent-data lvm2 //安装必要工具yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //设置yum源yum install -y docker-ce //下载dockersystemctl start docker //启…

excel函数技巧:两个查询函数的用法比较 下篇

VLOOKUP和LOOKUP这对高频函数的较量注定是场持久战。在前两个回合的较量中,VLOOKUP占据上风,此番更要乘胜追击。新一轮较量,即刻开战!***ROUND 03 交叉查询什么是交叉查询?我们可以通过一个查找值查找多个字段。如果被…

Android 深入系统完全讲解(26)

AudioTrack 构造过程 每一个音频流对应着一个 AudioTrack 类的一个实例,每个 AudioTrack 会在创建时注册到 AudioFlinger 中,由 AudioFlinger 把所有的 AudioTrack 进行混合(Mixer),然后输送到 AudioHardware 中进行播…

spice auth过程分析

1、客户端选择认证方法 Client authentication method selection抓包分析{Authentication selected by client: Spice (1)}代码分析spice_channel_send_link(channel);if (!spice_channel_recv_link_hdr(channel) ||!spice_channel_recv_link_msg(channel) ||!spice_channel_re…

Allegro如何设计线圈操作指导

Allegro如何设计线圈操作指导 在做PCB设计的时候,在特殊场合时候需要设计线圈,Allegro支持快速设计出线圈,如下图 具体操作如下 选择File选择Change Editor

实现树莓派homeassistant OS远程控制内网穿透--ddnsto教程

一、两种穿透服务 1、molohub 一种是论坛提供的molohub,但是可能因为自己这边的网络原因在配置过程中一直无法连接到服务器,无法绑定github,因此放弃molohub的方法。如下图所示。molohub教程如下,不再赘述。 molohub的Github教程…

ejson4cpp——一个使用极致简单且性能可比rapidjson的C++json解析库

文章目录ejson4cpp快速开始要求安装与引入开始使用常见用法API介绍通过命名风格识别API宏定义FROM_JSON_FUNC&FROM_JSON_FRIEND_FUNCTO_JSON_FUNC&TO_JSON_FRIEND_FUNCAUTO_GEN_NON_INTRUSIVE&AUTO_GEN_INTRUSIVEENABLE_JSON_COUTFromJSON系列函数参数说明使用示例…

WireShark从入门到精通

一、什么是WireShark?Wireshark 是一个开源抓包工具或者叫网络嗅探器,用于分析网络流量和分析数据包。其实WireShark以前的名字不叫WireShark,以前都叫做Ethereal,于1998 年首次开发,直到 2006 年才改为 Wireshark。Wi…

powerdns 系列之二 PowerDNS Authoritative Server

PowerDNS Authoritative Server 权威服务器,直接查询数据库去尝试解析,数据库中若不存在此记录,则直接返回空结果。 os: centos 7.8.2003 pnds: 4.7.3 安装 pdns 安装 pdns auth yum install epel-release yum-plugin-priorities curl -o…