Mysql
 sql >> Base de données >  >> RDS >> Mysql

afficher les 2 dernières entrées de chaque catégorie à partir d'une table mysql

Ce type de résultats est mieux géré par les fonctions de fenêtre dans d'autres SGBDR, mais malheureusement, Mysql n'a pas de fonctions de fenêtre, donc comme alternative, il existe une solution pour utiliser des variables définies par l'utilisateur pour attribuer un rang aux lignes appartenant au même groupe

SELECT  `id`, `category`, `names`
FROM (
SELECT *,
@r:= CASE WHEN @g = category THEN @r + 1 ELSE 1 END rownum,
@g:=category
FROM test
  CROSS JOIN(SELECT @g:=NULL ,@r:=0) t
  ORDER BY category,id desc
) c
WHERE c.rownum <=2 

La requête ci-dessus vous donnera 2 enregistrements récents (sur la base de l'identifiant) par catégorie, vous pouvez modifier la dernière partie de la requête avec la clause where en n'importe quel nombre pour afficher n résultats par groupe, par exemple pour afficher 3 enregistrements, puis WHERE c.rownum <= 3 et ainsi de suite

Demo