sql >> Database >  >> RDS >> Mysql

Groepeer op gebruiker en laat zien dat de laatste in MYSQL niet werkt

Zoals vermeld in de opmerkingen bij Robin's antwoord , is die benadering onbetrouwbaar omdat MySQL niet garandeert dat het altijd de meest recente status van elke groep zal retourneren. U moet in plaats daarvan uw tabel samenvoegen met een subquery die de meest recente status selecteert (op basis van addedDate ).

SELECT   *
FROM     status
  NATURAL JOIN (
    SELECT   userID, MAX(addedDate) as addedDate
    FROM     status
    GROUP BY userID
  ) AS mostRecent
ORDER BY addedDate DESC
LIMIT    10

Merk op dat als een gebruiker meerdere statusupdates heeft met dezelfde addedDate , de server zal ze allemaal teruggeven (terwijl Robin's vraag een onbepaald antwoord zou geven); als u controle over een dergelijke situatie wilt, moet u bepalen hoe u bepaalt welke statusupdate moet worden geselecteerd.



  1. Voorwaardelijke lead/lag-functie PostgreSQL?

  2. selecteer som tot een bepaald bedrag en werk vervolgens bepaalde velden bij op basis van voorwaarde

  3. MySQL selecteert de datum van gisteren

  4. Controleer of een tabel een externe sleutel heeft in SQL Server met OBJECTPROPERTY()