博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【sql】连续出现至少3次的数 Consecutive Numbers
阅读量:6690 次
发布时间:2019-06-25

本文共 1157 字,大约阅读时间需要 3 分钟。

  hot3.png

问题:

Write a SQL query to find all numbers that appear at least three times consecutively.

+----+-----+| Id | Num |+----+-----+| 1  |  1  || 2  |  1  || 3  |  1  || 4  |  2  || 5  |  1  || 6  |  2  || 7  |  2  |+----+-----+

For example, given the above Logs table, 1 is the only number that appears consecutively for at least three times.

+-----------------+| ConsecutiveNums |+-----------------+| 1               |+-----------------+

解决:

① 找出连续出现3次以上的数的值。由于需要找三次相同数字,所以我们需要建立三个表的实例,我们可以用l1分别和l2, l3内交,l1和l2的Id下一个位置比,l1和l3的下两个位置比,然后将Num都相同的数字返回即可。1822 ms

SELECT DISTINCT l1.Num ConsecutiveNums FROM Logs l1

JOIN Logs l2 ON l1.Id = l2.Id - 1
JOIN Logs l3 ON l1.Id = l3.Id - 2
WHERE l1.Num = l2.Num AND l2.Num = l3.Num;

② 直接在三个表的实例中查找,然后把四个条件限定上,就可以返回正确结果了。 2803 ms

SELECT DISTINCT l1.Num ConsecutiveNums FROM Logs l1,Logs l2,Logs l3

WHERE l1.Id = l2.Id - 1 AND l2.Id = l3.Id - 1
AND l1.Num = l2.Num AND l2.Num = l3.Num;

③ 用到了变量count和pre,分别初始化为0和-1。2438 ms

SELECT DISTINCT Num ConsecutiveNums FROM (

    SELECT Num, := IF( = Num, + 1,1) As n, := Num
    FROM Logs,(SELECT := 0,@pre := -1) As init
    ) As t WHERE t.n >= 3;

转载于:https://my.oschina.net/liyurong/blog/1570710

你可能感兴趣的文章
FIS本地发布-其他同事通过IP访问
查看>>
圆的半径的算法
查看>>
centos安装python-opencv
查看>>
基于Google排名因素对Drupal进行SEO优化
查看>>
action中redirectAction到另一个命名空间中的action该如何配置
查看>>
label标签利用jquery获取值得方式为$("#message").html()
查看>>
javascript创建Ajax对象
查看>>
php文件缓存
查看>>
思考方式--教会你如何去思考!
查看>>
mysql库的操作
查看>>
c++的getline()和get()函数
查看>>
面向对象第一单元总结
查看>>
模拟购物车
查看>>
web典型理论题整理HTML+CSS部分
查看>>
企业级 SpringCloud 教程 (五)路由网关(zuul)
查看>>
前端基础之jQuery入门 01
查看>>
Xshell 5 免费版本安装过程
查看>>
软件包的安装和管理
查看>>
关于ready和load方法作用于不同情况下的比较
查看>>
Asp.Net Core 项目实战之权限管理系统(8) 功能菜单的动态加载
查看>>