Đây là một biến thể của vấn đề "lớn nhất-n-mỗi nhóm" xuất hiện trên StackOverflow vài lần mỗi tuần.
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;
Cách hoạt động của điều này là chúng tôi cố gắng tìm một hàng (a2) có cùng accessid và userid, và ngày hoặc giờ sớm hơn hàng a1. Khi chúng tôi không thể tìm thấy hàng trước đó, thì a1 phải là hàng sớm nhất.
Lại nhận xét của bạn, tôi chỉ thử nó với dữ liệu mẫu mà bạn cung cấp. Đây là những gì tôi nhận được:
+----------+------------+----------+
| accessid | date | time |
+----------+------------+----------+
| 1 | 2009-08-15 | 01:01:01 |
| 2 | 2009-09-01 | 14:01:01 |
+----------+------------+----------+
Tôi đang sử dụng MySQL 5.0.75 trên Mac OS X.