Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Selecione a data e hora mais antigas da lista de sessões de usuários distintos


Essa é uma variação do problema do "maior n por grupo" que surge no StackOverflow várias vezes por semana.
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;

A maneira como isso funciona é que tentamos encontrar uma linha (a2) que tenha o mesmo accessid e userid e uma data ou hora anterior à linha a1. Quando não conseguimos encontrar uma linha anterior, a1 deve ser a primeira fileira.

Re seu comentário, eu apenas tentei com os dados de amostra que você forneceu. Aqui está o que eu recebo:
+----------+------------+----------+
| accessid | date       | time     |
+----------+------------+----------+
|        1 | 2009-08-15 | 01:01:01 | 
|        2 | 2009-09-01 | 14:01:01 | 
+----------+------------+----------+

Estou usando o MySQL 5.0.75 no Mac OS X.