sql over函数_如何使用 SQL 查找连续出现 3 次的数字

SQL 是作为开发工程师、数据工程师必须要深入掌握的一项技能。我也一直在提升这部分的能力,从入门到精通。除了阅读一些 SQL 经典书籍,刷题也是一个不错的选择。于是,我将做过的题目与解法,汇总到这里,和大家一起学习。

SQL 练习题系列和「体验碎片」系列一样,会不定期进行更新。

问题:编写一个 SQL 查询,查找连续出现 3 次的数字

2f71ecdf8b7611ee4b1580662e786453.png
结果:连续出现三次的数字为 1

解法1:使用偏移函数

1.使用偏移函数取出每个数值前一行和后一行的数据;2.错位后的三个数值应该相等;3.要对数值去重,如果某数字连续出现3次,之后又连续出现3次,会num多次输出相同的数字,而我们只需要一次而已。

select distinct  num  as ConsecutiveNumsfrom (select    num,   lead(num,1)over() as num1 ,   lag(num,1)over() as num2from Logs as L) awhere num = num1 and num = num2;

解法2:使用窗口函数 row_number

核心思路:如果是连续的记录,那么 (row_number() over(order by id)-row_number() over(partition by Num order by id))as rn 相同。

SELECT distinct(Num) as ConsecutiveNums from(SELECT Num,       (row_number() over(order by id)-row_number() over(partition by Num order by id))as rnfrom Logs) tgroup by Num,rnhaving count(1) >=3;
07108ad54d9f2865740f364ec38675fe.png

c204dabc5671f2c6c123446d5b6fdded.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值