Ir para conteúdo
  • 0

SELECT COM FUNÇÃO DE AGREÇÃO.


José Rogério do Prado Júni

Pergunta

  • Alunos

Prezados, bom dia!
Estou precisando fazer uma consulta com uma função de agreção MAX(), mas não está me trazendo o resultado desejado.

SELECT MAX(PLANILHA), NUMERO_CONTRATO, VALOR FROM CONTRATOS WHERE FILIAL = '18'
GROUP BY NUMERO_CONTRATO, VALOR

NESTE CASO, NÃO ESTÁ ME TRAZENDO SOMENTE O VALOR MÁXIMO DA PLANILHA.
Podem me dar um help?

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos

tem certeza? foi essa query mesmo que você usou? me mostra como ficou o resultado dela

SELECT *

FROM CONTRATOS  C

WHERE PLANILHA = (SELECT MAX(PLANILHA) FROM CONTRATOS C2 WHERE C2.FILIAL = C.FILIAL AND  C2.NUMERO_CONTRATO = C.NUMERO_CONTRATO)
AND C.FILIAL = '18'

 

Pq eu fiz questão de criar a sua tabela e trouxe exatamente o que vc queria

 

image.png.be05e38523737039b67e5a7c461ea296.png

Link para o comentário
Compartilhar em outros sites

  • 1
  • Alunos
Em 26/04/2022 em 15:06, Pri disse:

SELECT *

FROM CONTRATOS  C

WHERE PLANILHA = (SELECT MAX(PLANILHA) FROM CONTRATOS C2 WHERE C2.FILIAL = C.FILIAL AND  C2.NUMERO_CONTRATO = C.NUMERO_CONTRATO)
AND C.FILIAL = '18'

 

Eu teria que ver a sua planilha pra saber se dessa forma q eu fiz resolveria mesmo

oi @José Rogério do Prado Júni, pode marcar essa resposta como correta?

Isso ajuda bastante ao pessoal que  procura duvidas parecidas a já saber o resultado

  • Like 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

SELECT *

FROM CONTRATOS  C

WHERE PLANILHA = (SELECT MAX(PLANILHA) FROM CONTRATOS C2 WHERE C2.FILIAL = C.FILIAL AND  C2.NUMERO_CONTRATO = C.NUMERO_CONTRATO)
AND C.FILIAL = '18'

 

Eu teria que ver a sua planilha pra saber se dessa forma q eu fiz resolveria mesmo

  • Like 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Olá @José Rogério do Prado Júni!

Quando você quer o valor máximo de um campo de forma global , você deve colocar apenas ele nos campos do SELECT, quando você adiciona mais campos você quer dizer que quer o valor máximo para cada ocorrência diferente desses outros campos adicionados.

  • Apenas o número máximo geral:

SELECT MAX(PLANILHA)
FROM CONTRATOS
WHERE FILIAL = '18'

  • Número máximo por contrato:

SELECT MAX(PLANILHA), NUMERO_CONTRATO
FROM CONTRATOS
WHERE FILIAL = '18'
GROUP BY NUMERO_CONTRATO

E assim sucessivamente.

Se você quiser mais campos ou todos da tabela apenas para o valor máximo, neste caso seria como a @Pri colocou acima.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
5 horas atrás, Pri disse:

SELECT *

FROM CONTRATOS  C

WHERE PLANILHA = (SELECT MAX(PLANILHA) FROM CONTRATOS C2 WHERE C2.FILIAL = C.FILIAL AND  C2.NUMERO_CONTRATO = C.NUMERO_CONTRATO)
AND C.FILIAL = '18'

 

Eu teria que ver a sua planilha pra saber se dessa forma q eu fiz resolveria mesmo

@Pri, muito obrigado.
 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
34 minutos atrás, Michele disse:

Olá @José Rogério do Prado Júni!

Quando você quer o valor máximo de um campo de forma global , você deve colocar apenas ele nos campos do SELECT, quando você adiciona mais campos você quer dizer que quer o valor máximo para cada ocorrência diferente desses outros campos adicionados.

  • Apenas o número máximo geral:

SELECT MAX(PLANILHA)
FROM CONTRATOS
WHERE FILIAL = '18'

  • Número máximo por contrato:

SELECT MAX(PLANILHA), NUMERO_CONTRATO
FROM CONTRATOS
WHERE FILIAL = '18'
GROUP BY NUMERO_CONTRATO

E assim sucessivamente.

Se você quiser mais campos ou todos da tabela apenas para o valor máximo, neste caso seria como a @Pri colocou acima.

@michele, muito obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
41 minutos atrás, José Rogério do Prado Júni disse:

@Pri, muito obrigado.
 

A sua query traz o maior valor da planilha,  porém ela fixa o valor encontrado para os outros campos.

Por exemplo, tenho as colunas:

PLANILHA - CONTRATO - VALOR - FILIAL

1                      2                     300         18
2                      2                    200          18
1                      3                    500          18
2                      4                   600           18
3                      4                   100           18

Preciso que a consulta me traga os valores:
PLANILHA - CONTRATO - VALOR - FILIAL
2                           2                  200        18
1                           3                  500        18
3                           4                  100        18

este deverá ser o resultado. A maior planilha encontrada no contrato, junto com o número do contrato da maior planilha e o valor.

Grato.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Olá @José Rogério do Prado Júni!

Então, neste seu exemplo você não está retornando apenas linha com o campo MAX do campo PLANILHA, são três valores distintos desse campo. Seguindo esse exemplo enviado, ao pedir que seja retornado apenas o MAX do campo PLANILHA, vai retornar apenas a linha com o valor 3 no campo PLANILHA, pois neste cenário é o MAX deste campo.

Também não consegui achar padrão exatamente você precisa para retornar esses valores do resultado esperado, para mim parece  um resultado aleatório. Se você quiser o MAX do VALOR para aquela PLANILHA, aí o seu MAX precisa estar no campo VALOR, e não no campo PLANILHA.

Se o que você precisa é o MAX do VALOR por PLANILHA, seria algo assim:

SELECT PLANILHA, NUMERO_CONTRATO, MAX(VALOR) AS MaiorValor
FROM CONTRATOS
WHERE FILIAL = '18'
GROUP BY PLANILHA, NUMERO_CONTRATO

Caso ainda não seja isso, tentar explicar o que você precisa retornar, para tentarmos ver se é possível atender de outra forma ok?

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
Em 27/04/2022 em 09:44, Michele disse:

Olá @José Rogério do Prado Júni!

Então, neste seu exemplo você não está retornando apenas linha com o campo MAX do campo PLANILHA, são três valores distintos desse campo. Seguindo esse exemplo enviado, ao pedir que seja retornado apenas o MAX do campo PLANILHA, vai retornar apenas a linha com o valor 3 no campo PLANILHA, pois neste cenário é o MAX deste campo.

Também não consegui achar padrão exatamente você precisa para retornar esses valores do resultado esperado, para mim parece  um resultado aleatório. Se você quiser o MAX do VALOR para aquela PLANILHA, aí o seu MAX precisa estar no campo VALOR, e não no campo PLANILHA.

Se o que você precisa é o MAX do VALOR por PLANILHA, seria algo assim:

SELECT PLANILHA, NUMERO_CONTRATO, MAX(VALOR) AS MaiorValor
FROM CONTRATOS
WHERE FILIAL = '18'
GROUP BY PLANILHA, NUMERO_CONTRATO

Caso ainda não seja isso, tentar explicar o que você precisa retornar, para tentarmos ver se é possível atender de outra forma ok?

@michele muito obrigado.
com o exemplo da @Pri, ficou certinho.

Valeu!!

  • Like 1
Link para o comentário
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...