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

Vælg Tidligste dato og klokkeslæt fra listen over forskellige brugersessioner

Dette er en variation af det "største-n-per-gruppe"-problem, der dukker op på StackOverflow flere gange om ugen.

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;
 

Måden dette fungerer på er, at vi forsøger at finde en række (a2), der har samme accessid og bruger-id, og en tidligere dato eller tid end rækken a1. Når vi ikke kan finde en tidligere række, så skal a1 være den tidligste række.

Med hensyn til din kommentar, jeg har lige prøvet det med de prøvedata, du har givet. Her er hvad jeg får:

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

Jeg bruger MySQL 5.0.75 på Mac OS X.



  1. Django tegnsæt og kodning

  2. Hvordan producerer man sammensmeltning af to datasæt med udvalgt SQL-sætning (Oracle DBMS)?

  3. .NET SqlDependency med mange meddelelser i forhold til høj rate polling?

  4. Forståelse af Always ON Availability Group mellem Linux-baserede SQL Server-instanser. Del 1