mysql order by and group by

13/03/2023

On veut selectionner les derniers enregistrements d'une table en groupant par une colonne :
on pourrait penser que ça ça marche :

SELECT p.*
FROM (
    SELECT * 
    FROM posts
    ORDER BY id DESC -- or date desc
) AS p
GROUP BY p.author 

pour que ça marche il faut ajouter un inner join sur la même table, max(id)
le group by se retrouve alors dans le join

SELECT p.* 
FROM post as p
INNER JOIN (
    SELECT max(id) maxid
    FROM post
    GROUP BY author
) p2
  p.id = p2.maxid

sinon on peut utiliser max(date), mais il faut alors ajouter le champs qui sert a grouper pour que la "clé" (author+date) soit unique

SELECT p.* 
FROM post as p
INNER JOIN (
    SELECT max(date) maxdate, author
    FROM post
    GROUP BY author
) p2
  ON p.author = p2.author
  AND p.date = p2.maxdate

Raccourcis