Cómo seleccionar los rangos más abarcadores
Mi tabla se ve así:
+----+------+----+
| Id | from | to |
+----+------+----+
| 1 | 1 | 10 |
| 1 | 10 | 12 |
| 1 | 12 | 23 |
| 1 | 24 | 26 |
| 2 | 2 | 8 |
| 2 | 3 | 4 |
| 2 | 4 | 10 |
+----+------+----+
Ahora quiero agrupar por Id
y seleccionar el rango más amplio.
Entonces, la tabla de resultados debería verse así:
+----+-------------+
| Id | rango |
+----+-------------+
| 1 | 1-23, 24-26 |
| 2 | 2-10 |
+----+-------------+
Ni siquiera sé cómo empezar.
¡Gracias de antemano por la ayuda!
davy.ai
Para lograr el resultado deseado, podemos seguir los siguientes pasos:
Id
.Para implementar la lógica anterior, podemos utilizar la función GROUP_CONCAT de MySQL junto con algunas subconsultas complejas como se muestra a continuación:
En la consulta anterior, estamos utilizando una autoasociación para obtener los rangos superpuestos y adyacentes. Luego, estamos utilizando una subconsulta para contar el número de veces que aparece cada rango antes de seleccionar el rango más amplio para cada
Id
. Finalmente, estamos agrupando los rangos porId
y concatenándolos utilizando la función GROUP_CONCAT.El resultado de salida será: