180. 连续出现的数字
一、题目描述
编写一个 SQL 查询,查找所有至少连续出现三次的数字。
Id | Num |
---|---|
1 | 1 |
2 | 1 |
3 | 1 |
4 | 2 |
5 | 1 |
6 | 2 |
7 | 2 |
例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。
ConsecutiveNums |
---|
1 |
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/consecutive-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析
类似这种连续出现几次的问题,一般来说都是通过表错序自连来解决。即:
如上图所示,将表Logs自连三次,并令:
L1.Id = (L2.Id + 1) 且 (L2.Id = L3.Id + 1)
这样做的结果就是让连续三个Id对应的Num放在了一行,方便比较。当 L1.Num = L2.Num = L3.Num 时,就表示该 Num 至少连续出现了三次。
三、代码实现
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;