sql >> Database >  >> RDS >> Mysql

Selecteer Vroegste datum en tijd in de lijst met verschillende gebruikerssessies

Dit is een variatie op het "grootste-n-per-groep"-probleem dat meerdere keren per week op StackOverflow voorkomt.

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;

De manier waarop dit werkt, is dat we proberen een rij (a2) te vinden die dezelfde toegangs- en gebruikers-ID heeft, en een eerdere datum of tijd dan de rij a1. Als we geen eerdere rij kunnen vinden, dan moet a1 zijn de vroegste rij.

Wat betreft je opmerking, ik heb het net geprobeerd met de voorbeeldgegevens die je hebt verstrekt. Dit is wat ik krijg:

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

Ik gebruik MySQL 5.0.75 op Mac OS X.



  1. Hoe id-set van 1 updaten?

  2. MariaDB CEIL() uitgelegd

  3. Datumverschillogica in LINQ

  4. Tabel kan niet worden gemaakt in mysql -Error 1064