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
Bisbilhoscópio: monitorando Windows Server e IIS
Conheça o Bisbilhoscópio, meu monitor de Windows Server, IIS, SQL Server e MySQL com agente somente leitura e alertas em português. 1º servidor grátis.
ClickHouse: instalando na VPS e usando com Node.js
Como instalar o ClickHouse numa VPS Ubuntu, proteger com senha, criar uma tabela de acessos e consultar 10 milhões de linhas pelo Node.js.
Avaliando o RAG com o Jev como juiz
Como dar nota ao seu RAG em Node.js: um gabarito, a busca do Qdrant medida sem IA e o Jev, da TypeSafe, dizendo se cada resposta é fiel e correta.


