sql >> Databáze >  >> RDS >> Mysql

Vyberte nejdříve datum a čas ze seznamu odlišných uživatelských relací

Toto je variace problému „největšího počtu na skupinu“, který se na StackOverflow objevuje několikrát týdně.

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;

Funguje to tak, že se snažíme najít řádek (a2), který má stejné accessid a userid a dřívější datum nebo čas než řádek a1. Když nemůžeme najít dřívější řádek, musí a1 být první řádek.

Pokud jde o váš komentář, právě jsem to zkusil s ukázkovými údaji, které jste poskytli. Zde je to, co dostanu:

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

Používám MySQL 5.0.75 na Mac OS X.



  1. Postgres:Nebyl nalezen žádný vhodný ovladač pro jdbc

  2. Jak lze psát dotazy v MySQL, které mohou analyzovat data JSON ve sloupci?

  3. Převeďte text na číslo v dotazu MySQL

  4. Jak psát uložené procedury pro profesionální zprávy SSRS