Jest to odmiana problemu „największej liczby na grupę”, który pojawia się na StackOverflow kilka razy w tygodniu.
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;
Sposób, w jaki to działa, polega na tym, że próbujemy znaleźć wiersz (a2), który ma ten sam identyfikator dostępu i identyfikator użytkownika oraz wcześniejszą datę lub godzinę niż wiersz a1. Jeśli nie możemy znaleźć wcześniejszego wiersza, a1 musi być najwcześniejszy rząd.
Odwołaj się do Twojego komentarza, właśnie wypróbowałem go z podanymi przez Ciebie przykładowymi danymi. Oto, co otrzymuję:
+----------+------------+----------+
| accessid | date | time |
+----------+------------+----------+
| 1 | 2009-08-15 | 01:01:01 |
| 2 | 2009-09-01 | 14:01:01 |
+----------+------------+----------+
Używam MySQL 5.0.75 w systemie Mac OS X.