leetcode-database-180. Consecutive Numbers
2016-06-07 16:19
253 查看
Write a SQL query to find all numbers that appear at least three times consecutively.
For example, given the above
the only number that appears consecutively for at least three times.
题意:查询出连续出现3次的数字
思路:
定义参数preNum记录前一个Number的值,curRank记录目前连续出现的次数
@curRank:=@curRank +if(@preNum=Num,0,1)
如果当前的Number值等于preNum,那么curRank+1
select Num,@curRank:=@curRank + if(@preNum=Num,0,1) As rank,@preNum:=Num from Logs s,(select @curRank:=0) r,(select @preNum:=NULL) p order by id ASC
+------+-------+
| Num | rank |
+------+-------+
| 1 | 1 |
| 1 | 1 |
| 1 | 1 |
| 2 | 2 |
| 1 | 3 |
| 2 | 4 |
| 2 | 4 |
+------+-------+
select Num,count(rank) as cnt
from(select Num,@curRank:=@curRank + if(@preNum=Num,0,1) As rank,@preNum:=Num from Logs s,(select @curRank:=0) r,(select @preNum:=NULL) p order by id ASC) t
group by rank
+------+-------+
| Num | cnt |
+------+-------+
| 1 | 3 |
| 2 | 1 |
| 1 | 1 |
| 2 | 2 |
+------+-------+
最终sql语句:
select distinct Num as ConsecutiveNums from (select Num,count(rank) as cnt
from(select Num,@curRank:=@curRank + if(@preNum=Num,0,1) As rank,@preNum:=Num from Logs s,(select @curRank:=0) r,(select @preNum:=NULL) p order by id ASC) t
group by rank having cnt>=3) n;
+----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+
For example, given the above
Logstable,
1is
the only number that appears consecutively for at least three times.
题意:查询出连续出现3次的数字
思路:
定义参数preNum记录前一个Number的值,curRank记录目前连续出现的次数
@curRank:=@curRank +if(@preNum=Num,0,1)
如果当前的Number值等于preNum,那么curRank+1
select Num,@curRank:=@curRank + if(@preNum=Num,0,1) As rank,@preNum:=Num from Logs s,(select @curRank:=0) r,(select @preNum:=NULL) p order by id ASC
+------+-------+
| Num | rank |
+------+-------+
| 1 | 1 |
| 1 | 1 |
| 1 | 1 |
| 2 | 2 |
| 1 | 3 |
| 2 | 4 |
| 2 | 4 |
+------+-------+
select Num,count(rank) as cnt
from(select Num,@curRank:=@curRank + if(@preNum=Num,0,1) As rank,@preNum:=Num from Logs s,(select @curRank:=0) r,(select @preNum:=NULL) p order by id ASC) t
group by rank
+------+-------+
| Num | cnt |
+------+-------+
| 1 | 3 |
| 2 | 1 |
| 1 | 1 |
| 2 | 2 |
+------+-------+
最终sql语句:
select distinct Num as ConsecutiveNums from (select Num,count(rank) as cnt
from(select Num,@curRank:=@curRank + if(@preNum=Num,0,1) As rank,@preNum:=Num from Logs s,(select @curRank:=0) r,(select @preNum:=NULL) p order by id ASC) t
group by rank having cnt>=3) n;
相关文章推荐
- 堆排序
- wordcount
- Mac系统安装Openfire服务器配置
- OPENGL纹理
- Android 官方文档导读(Introduction)
- 11.3.2节练习
- SQL truncate 、delete与drop区别
- 如何创建Android Studio工程的git本地仓库——初级篇
- Android_SQLite数据库存储
- mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
- C++ 学习
- IOS 中的KVO模式 观察者模式
- ActiveMQ入门[转做笔记]
- PHP-表单
- 遇到问题-----mongodb-------Uncaught TypeError: Cannot read property 'value' of undefined
- OpenCV下设置灰度直方图的阈值来对图像进行查找(查表)变换的源码
- [leetcode] 300. Longest Increasing Subsequence
- oracle建表自增主键
- Linux环境 fork() 解析
- angularjs 表单验证