Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sélectionnez la date et l'heure les plus anciennes dans la liste des sessions utilisateur distinctes

Il s'agit d'une variante du problème "plus grand-n-par-groupe" qui survient sur StackOverflow plusieurs fois par semaine.

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 façon dont cela fonctionne est que nous essayons de trouver une ligne (a2) qui a le même accessid et userid, et une date ou heure antérieure à la ligne a1. Lorsque nous ne pouvons pas trouver une ligne précédente, alors a1 doit être la première ligne.

Concernant votre commentaire, je viens de l'essayer avec les exemples de données que vous avez fournis. Voici ce que j'obtiens :

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

J'utilise MySQL 5.0.75 sur Mac OS X.