数据库 180、连续出现的数字
编写一个 SQL 查询,查找所有至少连续出现三次的数字。
SQL架构:
Create table Logs (Id int, Num int)
insert into Logs (Id, Num) values ('1', '1')
insert into Logs (Id, Num) values ('2', '1')
insert into Logs (Id, Num) values ('3', '1')
insert into Logs (Id, Num) values ('4', '2')
insert into Logs (Id, Num) values ('5', '1')
insert into Logs (Id, Num) values ('6', '2')
insert into Logs (Id, Num) values ('7', '2')
Id | Num |
---|---|
1 | 1 |
2 | 1 |
3 | 1 |
4 | 2 |
5 | 1 |
6 | 2 |
7 | 2 |
例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。
题解:
select distinct Num as firstNum
from(select num,COUNT(*) num_count from(
--获取到对每条数据编号从1开始使用row_number()函数使用id,这些num值一样的进行排序
--两个相减之后,是相等的,则相减的值是一样的。如果不连续的话相减值不一样。
select Id,Num, ROW_NUMBER() over(order by id)-ROW_NUMBER() over (partition by num order by id) AS orde from Logs
)as a
--通过num和orde两个共同分组找到一样的一共有几个,我们就可以找到连续的了。
group by num,orde)as b
where num_count>=3
到此就结束啦,快去练习一下吧!欢迎大佬和小Monkey沟通。
感谢大佬指正 小Monkey
如果你觉得有用的话,就留个赞吧!蟹蟹