编写一个 SQL 查询,查找所有至少连续出现三次的数字。
+----+-----+
| Id | Num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+
例如,给定上面的 Logs
表, 1
是唯一连续出现至少三次的数字。
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1 |
+-----------------+
解题思路:
1.将Logs表以Num做两次左连接,等于“组合三行记录为一行”
2.判断“组合后的记录”,ID是否连续
答案:
/* Write your PL/SQL query statement below */
SELECT DISTINCT L1.Num AS ConsecutiveNums
FROM Logs L1
LEFT JOIN Logs L2 ON L1.Num = L2.Num --1.做两次左连接,等于“组合三行记录为一行”
LEFT JOIN Logs L3 ON L2.Num = L3.Num
WHERE L1.id = L2.id - 1 --2.判断“组合后的记录”,ID是否连续
AND L2.id = L3.id - 1