连续出现的数字

编写一个 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
    l1.Num AS 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
;
 
 
窗口函数:lead()

lead函数在Impala中可以配合over使用,lead函数有三个参数

lead(property,num,default)

第一个参数「property」标识想查询的列,「num」标识相对于当前行的第num行,第三个参数是默认值。

举例:

执行

SELECT id,lead(id,1,999) over(order by id) as next_id

观察结果

可见实现了我们获取当前 id 下一个id的需求

所以本题的窗口函数写法:

# Write your MySQL query statement below
select distinct num as ConsecutiveNums  from
(
    select num,lead(num,1)over()as num1,lead(num,2)over()as num2 
    from logs
) as c
where c.num = c.num1 and c.num1 = c.num2

 

posted @ 2020-08-18 14:19  索爷  阅读(142)  评论(0编辑  收藏  举报