Consecutive Numbers(LeetCode)
Problem Statement​
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| num | varchar |
+-------------+---------+
In SQL, id is the primary key for this table. id is an autoincrement column.
Find all numbers that appear at least three times consecutively.
Return the result table in any order.
Examples​
Example 1: Input:
Logs table:
+----+-----+
| id | num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+
Output:
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1 |
+-----------------+
Explanation: 1 is the only number that appears consecutively for at least three times.
Solution​
Approach​
-
We will first make creates three different aliases (log_1, log_2, and log_3) for the same table logs. It allows us to compare different rows within the same table.
-
Then simply use WHERE clause to get the result where id's and num in a row are consecutive and occurence of number is 3 times. The conditions that must be met for the rows to be included in the result:
- log_1.id = log_2.id + 1: The id of log_1 should be one more than the id of log_2. This means log_1 is immediately      after log_2.
- log_2.id = log_3.id + 1: Similarly, the id of log_2 should be one more than the id of log_3. This means log_2 is      immediately after log_3.
- log_1.num = log_2.num: The num value of log_1 should be equal to the num value of log_2.
- log_2.num = log_3.num: The num value of log_2 should be equal to the num value of log_3.
- log_1.id = log_2.id + 1: The id of log_1 should be one more than the id of log_2. This means log_1 is immediately      after log_2.
        Together, these conditions ensure that the three rows have consecutive id values and the same num value.
- Then from the result we will select the distinct numbers and then put inside a column named 'ConsecutiveNums'. numbers
Implementation​
SELECT distinct
log_1.num as ConsecutiveNums
FROM
logs log_1,
logs log_2,
logs log_3
WHERE
log_1.id=log_2.id+1 AND
log_2.id=log_3.id+1 AND
log_1.num=log_2.num AND
log_2.num=log_3.num
Conclusion​
This approach efficiently solves the problem of finding out the consecutive numbers.