[SQL智慧航行者] - 连续出现的数字

话不多说, 先看数据表信息.

数据表信息:

logs 表, 包含对应的编号 id, 和出现的数字Num.

复制代码
+----+-----+
| Id | Num |
+----+-----+
| 1  |  1  |
| 2  |  1  |
| 3  |  1  |
| 4  |  2  |
| 5  |  1  |
| 6  |  2  |
| 7  |  2  |
+----+-----+

话不多说, 再看需求~

需求:

编写一个 SQL 查询,查找所有至少连续出现三次的数字。输出如下结果:

复制代码
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1               |
+-----------------+

话不多说, 进行拆解~

拆解:

这里首先想到的是使用lead窗口函数, 将当前结果往后移动一个, 往后移动二个, 当三者结果一致, 则说明该数字出现过三次.

直接上SQL语句:

sql 复制代码
select 
id, num,
lead(num, 1) over(order by id) as num_1,
lead(num, 2) over(order by id) as num_2
from logs 
; 

结果如下:

再加上限制条件:

sql 复制代码
select t.id   
from (
    select 
    id, num,
    lead(num, 1) over(order by id) as num_1,
    lead(num, 2) over(order by id) as num_2
    from logs 
) as t 
where t.num = t.num_1
and t.num = t.num_2
;

就可以得到最终的结果:

最后给大家介绍一下我这边的操作步骤, 想要自己测试的话, 可以参考:

sql 复制代码
CREATE TABLE logs (
    Id INT,
    Num INT
);

INSERT INTO logs (Id, Num)
VALUES (1, 1), (2, 1), (3, 1), (4, 2), (5, 1), (6, 2), (7, 2);
相关推荐
Flying pigs~~28 分钟前
RAG智慧问答项目
数据库·人工智能·缓存·微调·知识库·rag
misL NITL1 小时前
mysql之如何获知版本
数据库·mysql
许彰午1 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
2501_927283582 小时前
荣联汇智助力天津艺虹打造“软硬一体”智慧工厂,全流程自动化引领印刷包装行业数智变革
大数据·运维·数据仓库·人工智能·低代码·自动化
2401_832365522 小时前
JavaScript中rest参数(...args)取代arguments的优势
jvm·数据库·python
2301_779622412 小时前
Go语言怎么用信号量控制并发_Go语言semaphore信号量教程【入门】
jvm·数据库·python
2301_766283443 小时前
c++如何将控制台输出保存到文件_cout重定向到txt【详解】
jvm·数据库·python
北极的冰箱3 小时前
MySQL Ver 8.0.41 for macos14.7密码遗忘
数据库·mysql
XDH_CS3 小时前
MySQL 8.0 安装与 MySQL Workbench 使用全流程(超详细教程)
开发语言·数据库·mysql
秋94 小时前
MySQL 8.0.46 全平台安装与配置详解(Windows/Linux/macOS)
linux·windows·mysql