Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

exibir as últimas 2 entradas em cada categoria de uma tabela mysql


Esses tipos de resultados são melhor tratados por funções de janela em outros RDBMS, mas infelizmente o Mysql não possui nenhuma função de janela, portanto, como alternativa, existe uma solução para usar variáveis ​​definidas pelo usuário para atribuir uma classificação para linhas que pertencem ao mesmo grupo
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 

A consulta acima fornecerá 2 registros recentes (com base no id) por categoria, você pode alterar a última parte da consulta com a cláusula where para qualquer número para mostrar n resultados por grupo, por exemplo, para mostrar 3 registros e então WHERE c.rownum <= 3 e assim por diante

Demo