Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Anzeige der letzten 2 Einträge in jeder Kategorie aus einer MySQL-Tabelle

Diese Art von Ergebnissen wird am besten von Fensterfunktionen in anderen RDBMS gehandhabt, aber leider hat Mysql keine Fensterfunktionen, daher gibt es alternativ eine Lösung, benutzerdefinierte Variablen zu verwenden, um Zeilen, die zur selben Gruppe gehören, einen Rang zuzuweisen

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 

Die obige Abfrage gibt Ihnen 2 aktuelle Datensätze (auf Basis der ID) pro Kategorie. Sie können den letzten Teil der Abfrage mit der where-Klausel in eine beliebige Zahl ändern, um n Ergebnisse pro Gruppe anzuzeigen, zum Beispiel um 3 Datensätze anzuzeigen, dann WHERE c.rownum <= 3 und so weiter

Demo