[LeetCode]-DataBase-Consecutive Numbers
2016-03-22 15:53
417 查看
Write a SQL query to find all numbers that appear at least three times consecutively.
For example, given the above
需求:找出所有连续出现的数字
CREATE TABLE Logs(
Id TINYINT UNSIGNED,
Num INT UNSIGNED
)ENGINE=MyISAM;
-- 思路和Rank Scores类似
-- 执行结果中的rank列将Num转化为从1开始递增的序号,但序号只在Num出现变化时增加,
-- 连续出现的相同数字序号也相同,只需要统计3次或以上的记录
SELECT DISTINCT t2.Num
FROM(
SELECT t1.Num,t1.Rank
FROM(
SELECT l.Num,@curRank:=@curRank+IF(@prevValue=l.Num, 0, 1) 'Rank',@prevValue:=l.Num
FROM Logs l,(SELECT @curRank:=0) c,(SELECT @prevValue:=NULL) p
)t1
)t2
GROUP BY t2.Rank
HAVING COUNT(t2.Rank)>=3
+----+-----+ | 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.
需求:找出所有连续出现的数字
CREATE TABLE Logs(
Id TINYINT UNSIGNED,
Num INT UNSIGNED
)ENGINE=MyISAM;
-- 思路和Rank Scores类似
-- 执行结果中的rank列将Num转化为从1开始递增的序号,但序号只在Num出现变化时增加,
-- 连续出现的相同数字序号也相同,只需要统计3次或以上的记录
SELECT DISTINCT t2.Num
FROM(
SELECT t1.Num,t1.Rank
FROM(
SELECT l.Num,@curRank:=@curRank+IF(@prevValue=l.Num, 0, 1) 'Rank',@prevValue:=l.Num
FROM Logs l,(SELECT @curRank:=0) c,(SELECT @prevValue:=NULL) p
)t1
)t2
GROUP BY t2.Rank
HAVING COUNT(t2.Rank)>=3
相关文章推荐
- word2007基础研究(一)-调节段落的行距与间距
- python中文乱码
- 【Matlab开发】MATLAB编译C/C++代码
- Zend加密服务器配置以及加密工具的使用
- RecyclerView的简单用法
- kali中wireshark打开后错误
- NET牛人应该知道些什么?(瞬间觉得自己弱爆了)
- 在 Android 上使用 RxNetty
- 数据存储——SQLite
- Educational Codeforces Round 5 D. Longest k-Good Segment
- linux命令:find 命令概览
- A框架第一步,传递不同参数.主程序执行对应方法
- HTML—CSS样式表
- PHP快速排序
- PHP二分查找
- 用模板实现 seqlist
- JS中多种方式创建对象详解
- caffe调试 ubuntu1404+eclipse
- Ubuntu14.04 Use Wireless Simulation Software Package
- UITextView文字怎样居上