sql查找至少连续出现三次的数字

表:logss

sql 复制代码
+-------------+---------+
| column name | type    |
+-------------+---------+
| id          | int     |
| num         | varchar |
+-------------+---------+

id 是这个表的主键。

编写一个 sql 查询,查找所有至少连续出现三次的数字。

返回的结果表中的数据可以按 任意顺序 排列。

查询结果格式如下面的例子所示:

logss 表:

sql 复制代码
+----+-----+
| id | num |
+----+-----+
| 1  | 1   |
| 2  | 1   |
| 3  | 1   |
| 4  | 2   |
| 5  | 1   |
| 6  | 2   |
| 7  | 2   |
+----+-----+

result 表:

sql 复制代码
+-----------------+
| consecutivenums |
+-----------------+
| 1               |
+-----------------+

1 是唯一连续出现至少三次的数字。

连续出现的意味着相同数字的 id 是连着的,由于这题问的是至少连续出现 3 次,我们使用 logs 并检查是否有 3 个连续的相同数字。

sql 复制代码
select *
from
    logss l1,
    logss l2,
    logss l3
where
    l1.id = l2.id - 1
    and l2.id = l3.id - 1
    and l1.num = l2.num
    and l2.num = l3.num
;
sql 复制代码
id      num     id      num     id      num
1       1       2       1       3       1

注意:前两列来自 l1 ,接下来两列来自 l2 ,最后两列来自 l3 。

然后我们从上表中选择任意的 num 获得想要 的答案。同时我们需要添加关键字 distinct ,因为如果一个数字连续出现超过 3 次,会返回重复元素。

mysql

sql 复制代码
select distinct
    l1.num as consecutivenums
from
    logss l1,
    logss l2,
    logss l3
where
    l1.id = l2.id - 1
    and l2.id = l3.id - 1
    and l1.num = l2.num
    and l2.num = l3.num
;
相关推荐
Leighteen1 天前
Redis与MySQL双写一致性:从问题根源到工程落地
数据库·redis·mysql
AI-好学者1 天前
阶段二-Cypher查询语言详解
数据库·rag·graphrag
龙仔7251 天前
SQL Server 批量多库只读账号一键脚本(带逐行注释完整脚本 + 分段逐句详细解释)
服务器·数据库·sql·sqlserver·dba
咏方舟【长江支流】1 天前
【开源】跨语言·跨平台·跨数据库(2) —— 用宝轻量框架设计必读
数据库·架构·开源·ai编程·咏方舟-长江支流·用宝框架
手握风云-1 天前
Redis:不只是缓存那么简单(十五)
数据库·redis·缓存
weixin_307779131 天前
Linux下Docker Compose里运行PostgreSQL数据库故障诊断Shell脚本
linux·运维·数据库·docker·postgresql
醉城夜风~1 天前
MySQL 常用内置函数全解:字符串、数值、日期、流程控制实战教程
数据库·mysql
程序猿秃头之路1 天前
DDD 系列:实体和值对象详解
数据库·oracle·ddd·领域驱动设计
明天谭1 天前
EzCloud自定义BI报表模块源码解析:动态SQL查询、可视化图表与多租户数据统计实现
数据库·sql·数据报表·bi可视化·ezcloud·java动态sql