Mantenga el grupo de filas juntas ordenado por el mínimo(tiempo) sin utilizar la cláusula “group by”.
Tengo una tabla de eventos generados por los usuarios al hacer cosas. Se ve aproximadamente así:
none
session | time | event | etc.
06efaa1805ef670c | 2022-01-07 08:41:03 | lockFound | etc.
06efaa1805ef670c | 2022-01-07 08:41:43 | lockLost | etc.
154032b09bec72f8 | 2022-01-07 10:41:03 | lockFound | etc.
154032b09bec72f8 | 2022-01-07 10:41:43 | lockLost | etc.
Necesito obtener todos estos eventos en un cierto orden:
- Deben agruparse por ID de sesión para que todos los eventos de una misma sesión aparezcan juntos.
- Las sesiones deben estar en orden de tiempo (preferiblemente el tiempo del primer evento en la sesión).
- El orden de los eventos en la sesión en realidad no importa.
- No quiero usar GROUP BY porque necesito cada evento en la tabla.
¿Cómo puedo hacer esto?
Los datos reales se encuentran aquí.
Obtenidos mediante:
SELECT * FROM dlrcoco_events ORDER BY time DESC
davy.ai
Para cumplir con los requisitos especificados, puedes utilizar la siguiente consulta:
Esta consulta realiza una unión interna entre la tabla
dlrcoco_events
y una subconsulta que calcula el tiempo mínimo para cada sesión. Esta subconsulta también agrupa los eventos por sesión. La unión se realiza utilizando la columnasession
.La tabla resultante se ordena por la columna
first_event_time
(ascendente) y la columnatime
(también ascendente). La columnafirst_event_time
se utiliza para agrupar las sesiones y ordenarlas correctamente.Esta consulta no utiliza la cláusula
GROUP BY
, por lo que todos los eventos se incluyen en la tabla de resultados.