Mysql
 sql >> база данни >  >> RDS >> Mysql

Изберете най-ранната дата и час от списъка с отделни потребителски сесии

Това е разновидност на проблема с „най-големите n-на група“, който се появява в StackOverflow няколко пъти седмично.

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;

Начинът, по който работи това, е, че се опитваме да намерим ред (a2), който има същия accessid и userid и по-ранна дата или час от ред a1. Когато не можем да намерим по-ранен ред, тогава a1 трябва да е най-ранният ред.

Относно вашия коментар, току-що го опитах с примерните данни, които предоставихте. Ето какво получавам:

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

Използвам MySQL 5.0.75 на Mac OS X.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция MySQL LOG2() – Връщане на логаритъм на база 2 на стойност

  2. mysql не може да се стартира в Mgt Development Environment

  3. Как да конвертирате грешно кодирани данни в UTF-8?

  4. добавете няколко стойности в една колона

  5. Как да се свържа с отдалечена база данни MySQL чрез SSL с помощта на Play Framework?