Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Mysql: consulta com group by


Guest --Otavio --

Pergunta

Guest --Otavio --

Aê pessoal ve se algume pode me ajudar ...

Tenho a seguinte estrutura:

COD - data - VALOR

1 - 13/05 - 100

2 - 22/05 - 200

1 - 14/05 - 300*

2 - 23/05 - 120*

3 - 10/10 - 50

3 - 12/10 - 13*

Preciso que este select agrupe(group by) os "COD" e me retorne somente os registros em que tenham a maior data, porem posicionado o registro no lugar certo pois o campo que me interessa é o cqampo valor, pois preciso da DO CAMPO VALOR NA ULTIMA DATA de CADA CODIGO ...

Usando :

select max(data) data, valor, cod from tabela group by cod

ele me traz o agrupamento e a maior data .. mas o valor nem sempre vem certo ...

Se algume puder ajudar seria de grande valia ..

Um abraço !

Otavio

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Oi,'--Otavio --'

Pelo que entendi você não irá usar nenuma função de agregação, então não há a necessidade de usar o GROUP BY

SELECT data, valor, cod FROM tabela ORDER BY cod ASC, data DESC;

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Otavio --

Ola denis obrigado pela atenção ...

O problema é que quero que o campo "cod" vire "chave unica" .. ou seja que so exista 1 vez ele na tabela resposta ...

Abraço !

Otavio

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Otavio --
E nem eu sugeri isto. Veja o resultado da sql que enviei.

Denis desculpe mas não sei se me expressei direito .... vamos la ..

O resultado da sua sugestão:

Data - valor - cod

14/05/2007 300.00 1

13/05/2007 100.00 1

23/08/2007 120.00 2

22/05/2007 200.00 2

12/10/2007 13.00 3

10/10/2007 50.00 3

Quando o resultado que procuro é:

Data - valor - cod

14/05/2007 300.00 1 * ultima data do mesmo codigo com o respectivo valor do registro da data

23/08/2007 120.00 2 * ultima data do mesmo codigo com o respectivo valor do registro da data

12/10/2007 13.00 3 * ultima data do mesmo codigo com o respectivo valor do registro da data

Será que tem alguma luz ???

Vlw pela força ...

Otavio

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, Otavio!

Montei uma tabela no meu banco de teste para tentar reproduzir o que você informou no primeiro e no post anterior a este.

Obtive o resultado que você demonstrou no post anterior a este usando o sql do primeiro código. Não entendi o que você quis dizer a respeito de

...

select max(data) data, valor, cod from tabela group by cod

ele me traz o agrupamento e a maior data .. mas o valor nem sempre vem certo ...

Pode explicar melhor? pois o resultado que tive foi o que você queria. A não ser que haja mais de uma linha com a mesma "max(data)". Neste caso é bem mais difícil. Pois o MySQL pega o primeiro registro que satisfaz o a cláusula GROUP BY. É este o caso?

Se for, talvez seja bom você criar um atributo autoincrementado (por trigger ou outro meio) para que você possa pegar o último registro inserido para o dia. Se você quer todas as datas, então voltaremos ao que falei antes e combinaremos com o seu código, assim:

SELECT data, valor, cod FROM teste WHERE (data, cod) IN (select max(data) data, cod from teste group by cod);

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Otavio --

Ola denis + uma vez obrigado ...

Vamus la deixa eu tentar explicar melhor ...

SELECT cod,data,valor FROM teste ORDER BY cod ASC, data DESC
retorna: Cod - Data - Valor 1 14/05/2007 300.00 1 13/05/2007 100.00 2 23/08/2007 120.00 2 22/05/2007 200.00 3 12/10/2007 13.00 3 10/10/2007 50.00 Quando, a resposta que preciso é somente os registro ( sei que poderia fazer no codigo este "filtro" facilmente em php .. mas é que é uma "cadeia de selects que to desenvolvendo que na verdade este é apenas um exemplo da resposta que preciso em uma subquery de uma outra .... ) Cod - Data - Valor 1 14/05/2007 300.00 2 23/08/2007 120.00 3 12/10/2007 13.00 (ou seja somente aqueles registros que tenham a maior data por codigo) .. E no caso de eu usar este exemplo seu com o group by(Num desespero de que venha a maior data de seu respectivo codigo(abaixo)) .. tenho o resultado "zuado" .. ou seja os valores que o sql pega do group by é o do 1º registro encontrado do mesmo grupo ... (repare na coluna valor )
SELECT codigo,max(dataa),valor FROM teste group by codigo ORDER BY codigo

1 13/05/2007 100.00

2 22/05/2007 200.00

3 10/10/2007 50.00

Ufa ... hehehe será que que o "animarzão" aqui conseguiu se expressar ??? rssss

valeu cara ( te devo uma cerva( caso não beba um refrigerante) ) ...

Otavio

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Otavio --

Cara matou a "charada" ...

MUITO Obrigado pela força ...

Fico te devendo a cerva .... ( Ou se me manda seus dados no meu email que lhe envio ela com prazer (abaixo).. hehehehe )

Irei me registrar na comunidade para poder participar + efetivamente das discuções ...

Um abraço ...

Otavio

fotaviog@hotmail.com

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...