Mysql
 sql >> Database >  >> RDS >> Mysql

Selezionare la prima data e ora dall'elenco delle sessioni utente distinti

Questa è una variazione del problema "più grande per gruppo" che si presenta su StackOverflow più volte alla settimana.

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;

Il modo in cui funziona è che proviamo a trovare una riga (a2) che abbia lo stesso accessid e userid e una data o ora precedente rispetto alla riga a1. Quando non riusciamo a trovare una riga precedente, allora a1 deve essere la prima riga.

Per quanto riguarda il tuo commento, l'ho appena provato con i dati di esempio che hai fornito. Ecco cosa ottengo:

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

Sto usando MySQL 5.0.75 su Mac OS X.