Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Dúvida sobre Group By

Boa tarde!

Fiz a seguinte query:

Select observacoes ,ValorMaisAlto = Max(valor) ,Qtd_Itens = Count(*) From Compras Group By observacoes

Como faço para trazer a data de cadastro do produto / observação com valor mais alto neste caso?

5 respostas

Oi Leonardo, eu acho que vc vai precisar de uma subquery..

Oi Alberto, tudo bem?

Tentei fazer uma subquery mas retornou o seguinte erro:

"An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference."

De qualquer forma agradeço a ajuda, vou pesquisar aqui..

Opa Leonardo, posta a query que vc tentou.

Oi Alberto, segue :

Select observacoes ,ValorMaisAlto = Max(valor) ,Qtd_Itens = Count(*) ,Valor_MaisAlto = (Select Top 1 Max(valor) From COMPRAS Where Valor = Max(valor) Group By observacoes) From Compras Group By observacoes

Tentei declarando uma variavel tbm como em procedures, mas não deu certo usando o MAX() na subquery, e sem ele o resultado vem repetido rs

Valeu.

solução!

Essa subquery =>

Select Top 1 Max(valor) From COMPRAS Where Valor = Max(valor) Group By observacoes

Em vez de usar o where na subquery, tenta usar o having.. pq aí vc pode trabalhar baseado resultado do agrupamento. Com o where isso não vai rolar, vc não pode usar as funções de agregação no where, dado que ele não agrupou ainda.