180. 连续出现的数字(SQL)

一、题目描述
编写一个 SQL 查询,查找所有至少连续出现三次的数字。

±—±----+
| Id | Num |
±—±----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
±—±----+
例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。

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

二、题解
方法一:

# Write your MySQL query statement below
SELECT
    distinct b.Num as ConsecutiveNums 
FROM
    Logs a,Logs b,Logs c
where a.Id = b.Id - 1 and b.Id = c.Id - 1 and a.Num = b.Num and b.Num = c.Num

方法二:使用窗口函数

# Write your MySQL query statement below
SELECT
    distinct t.Num as ConsecutiveNums 
FROM
    (
        SELECT
        Num,
        LAG(Num,1) over(order by Id) Num1,
        LAG(Num,2) over(order by Id) Num2
    FROM
        Logs
    )t
where t.Num = t.Num1 and t.Num1 = t.Num2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值