Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wählen Sie das früheste Datum und die früheste Uhrzeit aus der Liste der einzelnen Benutzersitzungen aus

Dies ist eine Variante des „größten-n-pro-Gruppe“-Problems, das mehrmals pro Woche bei StackOverflow auftritt.

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;

Dies funktioniert so, dass wir versuchen, eine Zeile (a2) zu finden, die dieselbe Zugriffs- und Benutzer-ID und ein früheres Datum oder eine frühere Uhrzeit als die Zeile a1 hat. Wenn wir keine frühere Zeile finden können, muss a1 sein die früheste Zeile.

Bezüglich Ihres Kommentars habe ich es gerade mit den von Ihnen bereitgestellten Beispieldaten versucht. Hier ist, was ich bekomme:

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

Ich verwende MySQL 5.0.75 unter Mac OS X.