Limit no agrupamento em Mysql

janeiro 18, 2018 em Mysql, SQL por Sândler

Limit no agrupamento em Mysql

 

Imaginamos que é necessário coletar informações agrupadas com um limite de quantidade por agrupamento, todas informações por grupo em uma única query.
Recomendo fazer a busca e gerar isso na programação ou procedure, mas o método abaixo vai fazer o que precisa, mas deixará a busca lenta dependendo do tamanho da tabela.


Exemplo: 

PRODUTO  QTD    DATA
1                    1           18/01/2018
2                    1           18/01/2018
1                    1              10/11/2017
3                    1           18/01/2018
2                    1           05/01/2018
2                    1             03/01/2018
3                    1             11/12/2017
3                    1           22/12/2017
1                    1           05/12/2017

 

Esta query somente vai fazer com que você concatene e agrupe da forma que quer um campo, mas o resultado seria para todos os registros: 

select produto , GROUP_CONCAT(data_cadastro ORDER BY data_cadastro DESC) dategroup
from teste
group by produto;

 

Agora desta forma com o SUBSTRING_INDEX, você pode definir a quantidade de informações por registro que vai querer, imaginando que você quer somente 2(dois):
select produto , SUBSTRING_INDEX(GROUP_CONCAT(data_cadastro ORDER BY data_cadastro DESC), ‘,’, 2) dategroup
from teste
group by produto;

 

 

References:
 - https://stackoverflow.com/questions/2129693/using-limit-within-group-by-to-get-n-results-per-group
 - https://stackoverflow.com/questions/43254054/php-mysql-group-concat-limit/43254096