mysql:查询N个连续出现的数字

编程入门 行业动态 更新时间:2024-10-25 08:25:11

mysql:查询N个连续出现的<a href=https://www.elefans.com/category/jswz/34/1771323.html style=数字"/>

mysql:查询N个连续出现的数字

前言:
前面刚做的180.连续出现的数字是查询3个连续出现的数字,倘若要查询连续出现4,5…N个数字呢?当然这个问题肯定使用解决方法的,也可以说是模板。

解决方法:

  • 1)找规律:我们发现连续的数字是相同的数字,但是id有可能不是连续的,我们就需要通过对结果集进行再次编号,让其变成连续的。原始数据表如下:

  • 2)我们需要使用row_number()来对id进行升序排序,sql语句如下:

SELECT id,num,row_number() over (ORDER BY  id) AS ordeFROM logs

查询结果如下:

  • 3)我们使用partition by num对num分组(也就是num相同的作为一组),然后再用order by对相同的num组里面的id进行排序,sql语句如下:
SELECTid,num,row_number() over (PARTITION BY num ORDER BY id) AS ordeFROM logs

查询结果如下:

  • 4)观察规律,我们可以发现将步骤2与步骤3的查询结果相减,只要num值相同的相减的值都是一样的,sql语句如下:
SELECTid,num,row_number() over (ORDER BY id) -row_number() over (PARTITION BY num ORDER BY id) as ordefrom logs

查询结果如下:

  • 5)得出结果,分为两步。第一步对num与orde的组合进行分组检索;第二步检索num_count>=3的数字。
-- 第一步:检索num与orde分组的结果,即num与orde组合在一起相同的分为一组
SELECT num,count(*) num_count FROM(SELECT id,num,row_number() over (ORDER BY id)-row_number() over (PARTITION by num order by id) as ordefrom logs)as w GROUP BY num,orde

结果图如下:

-- 第二步:检索出连续出现3个数字
SELECT DISTINCT num as ConsecutiveNums from(SELECT num,count(*) num_count FROM(SELECT id,num,row_number() over (ORDER BY id)-row_number() over (PARTITION by num order by id) as ordefrom logs)as w GROUP BY num,orde)as s where num_count >=3

结果图如下:

更多推荐

mysql:查询N个连续出现的数字

本文发布于:2023-07-28 18:53:15,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1279889.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数字   mysql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!