sql >> Base de Datos >  >> RDS >> Mysql

Seleccione la fecha y la hora más tempranas de la lista de sesiones de usuario distintas

Esta es una variación del problema "mayor n por grupo" que aparece en StackOverflow varias veces por semana.

SELECT 
        a1.accessid, 
        a1.date, 
        a1.time 
FROM 
        accesslog a1
LEFT OUTER JOIN
        accesslog a2
  ON (a1.accessid = a2.accessid AND a1.userid = a2.userid
    AND (a1.date > a2.date OR a1.date = a2.date AND a1.time > a2.time))
WHERE a1.userid = '1234'
  AND a2.accessid IS NULL;

La forma en que esto funciona es que tratamos de encontrar una fila (a2) que tenga el mismo ID de acceso y de usuario, y una fecha u hora anterior a la fila a1. Cuando no podemos encontrar una fila anterior, entonces a1 debe ser la primera fila.

Con respecto a su comentario, acabo de probarlo con los datos de muestra que proporcionó. Esto es lo que obtengo:

+----------+------------+----------+
| accessid | date       | time     |
+----------+------------+----------+
|        1 | 2009-08-15 | 01:01:01 | 
|        2 | 2009-09-01 | 14:01:01 | 
+----------+------------+----------+

Estoy usando MySQL 5.0.75 en Mac OS X.