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

visualizzare le ultime 2 voci in ogni categoria da una tabella MySQL

Questo tipo di risultati sono gestiti al meglio dalle funzioni della finestra in altri RDBMS ma sfortunatamente Mysql non ha alcuna funzione della finestra, quindi in alternativa esiste una soluzione per utilizzare variabili definite dall'utente per assegnare un rango alle righe che appartengono allo stesso gruppo

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 query sopra ti darà 2 record recenti (sulla base dell'id) per categoria puoi cambiare l'ultima parte della query con la clausola where in qualsiasi numero per mostrare n risultati per gruppo, ad esempio per mostrare 3 record, quindi WHERE c.rownum <= 3 e così via

Demo