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 de l2 y al final las de l3.

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;

slackmart blog © 2024