Consulta MySQL ordenando datos de dos maneras
-
08-07-2019 - |
Pregunta
Estoy rastreando vistas de página dentro de módulos usando la siguiente tabla:
id | page_id | user_id | session_id | created
Cada página es exclusiva de un determinado módulo; así que la página 14 solo existe en el módulo 2, por ejemplo.
Estoy tratando de escribir una consulta que me informa cuándo comenzó una sesión de visualización (GROUP BY session_id) para un módulo en particular, pero estoy teniendo problemas con mi pedido. Básicamente, para esa sesión agrupada, quiero devolver el primer 'creado' (la hora de inicio de la sesión de visualización) y el último page_id (qué tan lejos llegaron dentro del módulo).
¿Cuál es la mejor manera de lograr esto?
Solución
Creo que necesitará utilizar subconsultas en la selección:
SELECT a.session_id, MIN(a.created) as start_time,
b.page_id AS last_page, b.end_time
FROM table a
INNER JOIN
(SELECT b.session_id, MAX(b.created) as end_time, MAX(b.page_id)
FROM table b GROUP BY b.session_id)
ON a.session_id = b.session_id GROUP BY a.session_id
Otros consejos
SELECT MIN(created), MAX(page_id)
FROM modules
GROUP BY
session_id
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow