Pular para o conteúdo
MySQL

MYSQL — GroupBy e Order não funcionam corretamente?

Atualizado em
Capa do artigo: MYSQL — GroupBy e Order não funcionam corretamente?

Ola Gente!

Esta é uma pegadinha que acaba nos pegando.

Imagine que temos uma base com a seguinte estrutura:

Ou seja, a tabela armazena as datas em que nossos produtos foram editados.

Agora queremos retornar apenas a última modificação de cada produto, então fazemos a query abaixo:

Select
CodigoProduto,
DataModificacao
From
teste1
Group by 
CodigoProduto
Order by
DataModificacao
Desc

E acabamos tendo o resultado abaixo:

Oé! Trouxe a primeira data em que os produtos foram modificados?

SIM! Nesta query, primeiro a base ira agrupar os dados, e depois, com os dados agrupados ira ordenar, ou seja, trazendo o primeiro registro relacionado a coluna agrupada, veja:

Independente da ordenação aplicada o GroupBy terá prioridade.

O mysql segue a seguinte ordem:

1. From
2. Where
3. Select
4. GroupBy <<< Primeiro
5. Having
6. OrderBy << Depois dos dados agrupados
7. Limit

Então como resolver?

Esqueça o Order e vamos buscar esta a informação direto na declaração de campos retornados, usando a função “max”, que traz o maior valor em um coluna:

Select
CodigoProduto,
Max(DataModificacao)
From
teste1
Group by 
CodigoProduto

E teremos o resultado:

Por hoje é isto, queridos desenvolvedores! 👩‍💼

Até logo! 👋

Leia também

MySQL

MyISAM para InnoDB em massa com Node.js

Convertendo 302 tabelas MyISAM para InnoDB com Node.js e mysql2: varredura por database, conversão verificada, log em arquivo e as armadilhas do caminho.

Node.js

Node.js: backup de uma base MySQL

Como fazer backup de uma base MySQL com Node.js e mysqldump: o exit code que mente, a senha exposta no ps e as flags que importam.