Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wybierz najwcześniejszą datę i godzinę z listy odrębnych sesji użytkownika

Jest to odmiana problemu „największej liczby na grupę”, który pojawia się na StackOverflow kilka razy w tygodniu.

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;

Sposób, w jaki to działa, polega na tym, że próbujemy znaleźć wiersz (a2), który ma ten sam identyfikator dostępu i identyfikator użytkownika oraz wcześniejszą datę lub godzinę niż wiersz a1. Jeśli nie możemy znaleźć wcześniejszego wiersza, a1 musi być najwcześniejszy rząd.

Odwołaj się do Twojego komentarza, właśnie wypróbowałem go z podanymi przez Ciebie przykładowymi danymi. Oto, co otrzymuję:

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

Używam MySQL 5.0.75 w systemie 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. Przyznaj uprawnienia do kilku tabel z określonym prefiksem

  2. Znajdź pozycję ciągu i dołącz do rzędu w innym stole

  3. SQL SERVER – Jedna sztuczka do obsługi dynamicznego SQL, aby uniknąć ataku SQL Injection?

  4. Duża baza danych MySQL (21 MM rekordów) z danymi lokalizacji — każda lokalizacja ma długość i długość — trzeba uruchomić zapytanie „w pobliżu”

  5. Najlepszy sposób na przechowywanie danych po stronie serwera?