Solución
EstrategÃa: Usar DISTINCT y WHERE
Algoritmo
Que aparezca consecutivamente significa que los Id del num
están uno al lado del otro. Dado que este
problema nos pide filtrar los números que aparecen al menos tres veces consecutivamente, podemos usar 3
aliases para la tabla Logs
, y después filtrar los datos cuando haya 3 números iguales y sus Ids sean
consecutivos.
Ejemplo de entrada
Tabla logs:
| id | num |
| -- | --- |
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
Filtrando los datos
SELECT *
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;
Salida
Id | Num | Id | Num | Id | Num |
---|---|---|---|---|---|
1 | 1 | 2 | 1 | 3 | 1 |
Nota: Las primeras dos columnas son del alias
l1
, en seguida vienen las columnas del2
y al final las del3
.
Ahora ya podemos elegir cualquier columna num
de la tabla para obtener el resultado. Sin embargo,
necesitamos agregar DISTINCT
para eliminar los duplicados en caso de que un número aparezca más de tres
veces consecutivamente.
Implementación
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;