es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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:

  1. Deben agruparse por ID de sesión para que todos los eventos de una misma sesión aparezcan juntos.
  2. Las sesiones deben estar en orden de tiempo (preferiblemente el tiempo del primer evento en la sesión).
  3. El orden de los eventos en la sesión en realidad no importa.
  4. 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
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para cumplir con los requisitos especificados, puedes utilizar la siguiente consulta:

    SELECT e.*
    FROM dlrcoco_events e
    JOIN (
      SELECT session, MIN(time) AS first_event_time
      FROM dlrcoco_events
      GROUP BY session
    ) s ON e.session = s.session
    ORDER BY s.first_event_time ASC, e.time ASC
    

    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 columna session.

    La tabla resultante se ordena por la columna first_event_time (ascendente) y la columna time (también ascendente). La columna first_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.

Comments are closed.