SQL实战从在职到离职(1) 如何处理连续查询

news/2024/11/15 7:10:11/文章来源:https://www.cnblogs.com/qwqwQAQ/p/18334689

书接上回,最近离职在家了实在无聊,除了看看考研的书,打打dnf手游,也就只能写写代码,结果昨晚挂在某平台的一个技术出售有人下单了,大概业务是需要帮忙辅导一些面试需要用到的SQL。
回想了下,在该平台接单SQL也超过3w元了,考察的也就是那几大类,我准备开一个新的专题,把我遇到的题目做一些示例和总结,欢迎大家指正。

今日主题:连续数据的查询
场景

场景一:需要查询最大连续签到的时长,一般用于toc的场景中
场景二:查询连续人流量超过2w的日期,某游乐场的业务管理系统

思路

这种题目我一般常用的思路就是动转静,连续转不变。
比如场景二,需要找连续的日期,那么就要再找一个连续的变量,让两个变量进行相减或者其他操作,得到不变的数据,然后通过分组或者分区查询即可。

例题

体育馆人流量表

列名 类型
id int
visit_date date
people int

visit_date 是该表中具有唯一值的列。
每日人流量信息被记录在这三列信息中:序号 (id)、日期 (visit_date)、 人流量 (people)
每天只有一行记录,id与日期递增,日期不一定是连续递增。
编写SQL找出每天的人数大于或等于 100 且 日期 连续的三行或更多行记录。返回按 visit_date 升序排列 的结果表
Scheme:

Create table If Not Exists Stadium (id int, visit_date DATE NULL, people int)
Truncate table Stadium
insert into Stadium (id, visit_date, people) values ('1', '2017-01-01', 10)
insert into Stadium (id, visit_date, people) values ('2', '2017-01-02', 109)
insert into Stadium (id, visit_date, people) values ('3', '2017-01-03', 150)
insert into Stadium (id, visit_date, people) values ('4', '2017-01-04', 99)
insert into Stadium (id, visit_date, people) values ('5', '2017-01-05', 145)
insert into Stadium (id, visit_date, people) values ('6', '2017-01-06', 1455)
insert into Stadium (id, visit_date, people) values ('7', '2017-01-07', 199)
insert into Stadium (id, visit_date, people) values ('8', '2017-01-09', 188)
例题解释

体育馆的人流表,要求找出最少三天连续人流量超过100的数据,并且按照
visit_date升序排序。

实战

做题目前先回顾下SqlServer中的一个函数

DATEADD(DAY,2,'2020-03-27');

该函数可以在日期上进行加减,并且可以执行加减的日期部分,DAY表示天数增加。

按照思路,日期连续,那么可以生成一列行号,用日期与行号作差,如果结果相等则表示连续。

解题 生成行号

需要自己创造动态列,比如自己添加行号列
至于为什么不用ID,id也是递增的,我们做完再讲。

SELECT t1.id,t1.visit_date,t1.people FROM (
SELECT t.*, COUNT(1) OVER(partition by DATEADD(DAY, t.rowId * -1,t.visit_date)) AS daysCount FROM
(SELECT *,ROW_NUMBER() Over (ORDER BY id) as rowId FROM Stadium where people >= 100) t
) t1 WHERE t1.daysCount > =3

步骤
1.筛选人流量大于等于100的数据,并且通过分区函数增加行号
2.用日期减去行号得到一个日期,相等则表示日期连续,再次通过分区函数基于得到的日期获取分区数量
3.筛选分区数量大于等于3的就是连续三天或者三天以上人流量大于等于100的数据
4.作为子查询结果处理得到结果。

结果
image

为什么不用id还是需要自己创造行号。因为筛选掉人流量不够的数据后,id与时间的等差结果还是不会变,就会得到错误的数据,本身不满足的数据仍旧会被查询出来。

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

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

相关文章

三,搭建环境:事务控制

三,搭建环境:事务控制 @目录三,搭建环境:事务控制声明式事务配置注解写法查询操作增删改操作声明式事务配置 在 demo-module01-web 的模块下的,spring-persist.xml 配置文件中开启基于注解的声明式事务支持<!-- 配置事务管理器 --><bean id="transactionMan…

手写MyBatis 重要基本原理框架

1. 手写MyBatis 重要基本原理框架 @目录1. 手写MyBatis 重要基本原理框架1.1 第一步:IDEA中创建模块1.2 第二步:资源工具类,方便获取指向配置文件的输入流1.3 第三步:定义SqlSessionFactoryBuilder类1.4 第四步:分析SqlSessionFactory类中有哪些属性1.5 第五步:定义JDBCT…

win10 开启wsl

开启 hypver-v查看wsl poweershellwsl --list --online下载分发版本 等待下载即可 poweershellwsl --install -d Ubuntu-20.04设置为wsl2 poweershellwsl --set-default-version 2使用wsl powershell wslmoberxterm设置到wsl moberxterm设置清华源 /etc/apt/source.list # 默认…

如何在 Kubernetes 里部署 JMX Exporter

本文会通过一个 Java 应用,演示 Prometheus JMX Exporter 在 Kubernetes 里的部署和配置方式。为了更好地理解 JMX Exporter,我们将使用 Spring Boot Java 应用程序并将所有 JMX 指标导出给 Prometheus。在本指南结束时,您将学习:使用 Java 应用镜像启动 JMX Exporter 将 J…

vue3 双向绑定 dialog

父组件:<ViewPopupForm v-model="isView"/> 子组件: const emit = defineEmits([update:modelValue])const props = defineProps({isView: Boolean,//接收父组件ParentComponent传过来的数组 });

服务注册中心+配置中心-Nacos-微服务核心组件【分布式微服务笔记07】

服务注册中心+配置中心-Nacos-微服务核心组件【分布式微服务笔记07】 服务注册中心+配置中心-NacosNacos 有两大功能: 注册中心[替代Eureka]+配置中心[替代Config] 架构理论基础: CAP 理论(支持AP【高可用、分区容错性】 和CP【分区容错性和数据一致性】, 可以切换)Nacos 结构…

Oracle数据库自动备份

1.bat脚本 格式为ANSI格式 set CURDATE=%date:~0,4%%date:~5,2%%date:~8,2% set CURMON=%date:~0,4%%date:~5,2% set CURTIME=%time:~0,2% if "%CURTIME%"==" 0" set CURTIME=00 if "%CURTIME%"==" 1" set CURTIME=01 if "%CURT…

老式移动和联通标准SIM卡在2024的今天

前言 在我手里的,是一张普通联通和一张移动M-ZONE标准SIM卡桌上散落的SIM卡碎片已经说明了一切——— 我要把这些00后的SIM卡装入2024年的手机(图中为大卡的测试机,没那么有风险)联通 输入123456,直接被锁,提示要用puk码解锁我后来再搜索puk码的时候才知道默认pin码是123…

我的编程经历,从天桥地摊Basic到西藏阿里的.Net AOT。(一,从井到Sharp)

撇清一层歧义:标题中的阿里不是指阿里巴巴集团,喜马拉雅也不是指那个做音频频道的公司,文中所及内容以及我本人都与他们没有任何关联。依照地理正式名称:阿里指的是西藏西部阿里地区,喜马拉雅指的是青藏高原地球最高山脉。 从前我在博客园不叫这个名字,今天很多自己的早…

计算机网络基础第五讲 传输层

计算机网络基础第五讲 传输层 第一节:传输层概述 1. 运输层概述2. 运输层功能两种不同协议:TCP:面向连接,全双工可靠信道;仅支持单播;复杂 UDP:无连接不可靠;支持单播,多播,广播;应用层来负责可靠;简单 第二节:端口号 1. 运输层的端口 进程标识符来标记进程; 不应…

计算机网络基础第六讲 应用层

计算机网络基础第六讲 应用层 第一节:应用层概述第二节:DNS 1. 域名系统DNS实现域名到IP的映射2. 域名服务器3. 域名的解析过程迭代+递归解析递归解析4. 提高可靠性和速度的方法第三节:FTP 1.FTP概述2. FTP工作模式3. FTP两个连接控制连接必须先于数据连接建立 数据连接必须…

TCP状态转移图说明及使用tcpdump进行观测

一、TCP状态转移图说明图1.TCP状态转移图这张图展示了 TCP(Transmission Control Protocol,传输控制协议)的状态转移图,描述了 TCP 连接在不同阶段之间的状态变化和相互转换。 (一)、建立连接(三次握手)图2.TCP三次握手示意图1、服务器准备好接受外来连接,通常通过soc…