Busca por maior valor
Bom dia!
Estou tentando criar uma expressão que busque apenas os maiores valores de uma coluna. No exemplo abaixo, poderão perceber que o mesmo produto se repete (Id_Prod) porque houveram entradas destas mercadorias em datas diferentes (Dt_Ent) e o que eu preciso saber é qual o maior valor de entrada (Custo) para cada produto.
A tabela ela aparece assim:
Id_Prod / Dt_Ent / Custo
1 / 04/01/2016 / 1,25
1 / 29/02/2016 / 1,48
1 / 11/01/2016 / 1,71
2 / 07/03/2016 / 1,68
2 / 18/01/2016 / 2,11
2 / 14/03/2016 / 2,54
3 / 25/01/2016 / 3,41
3 / 21/03/2016 / 4,28
3 / 01/02/2016 / 5,15
O resultado desejado é:
Id_Prod / Dt_Ent / Custo
1 / 11/01/2016 / 1,71
2 / 14/03/2016 / 2,54
3 / 01/02/2016 / 5,15
Muito obrigado!
Estou tentando criar uma expressão que busque apenas os maiores valores de uma coluna. No exemplo abaixo, poderão perceber que o mesmo produto se repete (Id_Prod) porque houveram entradas destas mercadorias em datas diferentes (Dt_Ent) e o que eu preciso saber é qual o maior valor de entrada (Custo) para cada produto.
A tabela ela aparece assim:
Id_Prod / Dt_Ent / Custo
1 / 04/01/2016 / 1,25
1 / 29/02/2016 / 1,48
1 / 11/01/2016 / 1,71
2 / 07/03/2016 / 1,68
2 / 18/01/2016 / 2,11
2 / 14/03/2016 / 2,54
3 / 25/01/2016 / 3,41
3 / 21/03/2016 / 4,28
3 / 01/02/2016 / 5,15
O resultado desejado é:
Id_Prod / Dt_Ent / Custo
1 / 11/01/2016 / 1,71
2 / 14/03/2016 / 2,54
3 / 01/02/2016 / 5,15
Muito obrigado!
Pedro Junior
Curtidas 0
Respostas
Alex Lekao
06/05/2016
nao sei se entendi bem.
talves se vc postar o script que ja fez, possamo ajudar melhor.
Mas basicamente, nao sei se funciona com oracle, vc pode utilizar o max().
Caso queira que retorne apenas 3 itens, vc pode utilizar o top 3.
Espero ter ajudado.
talves se vc postar o script que ja fez, possamo ajudar melhor.
Mas basicamente, nao sei se funciona com oracle, vc pode utilizar o max().
Caso queira que retorne apenas 3 itens, vc pode utilizar o top 3.
Espero ter ajudado.
GOSTEI 0
Pedro Junior
06/05/2016
Bom dia Alex!
Aqui mesmo no fórum é sugerido usar o MAX(), e eu tentei usar a expressão sugerida:
SELECT * FROM FUNCIONARIO WHERE SALARIOFUNCIONARIO = (SELECT MAX(SALARIOFUNCIONARIO) FROM FUNCIONARIO)
Adequei a minha realidade, porém, esta expressão retorna apenas o maior valor.
O que eu preciso que retorne é o maior valor por produto.
Muito Obrigado!!!
Aqui mesmo no fórum é sugerido usar o MAX(), e eu tentei usar a expressão sugerida:
SELECT * FROM FUNCIONARIO WHERE SALARIOFUNCIONARIO = (SELECT MAX(SALARIOFUNCIONARIO) FROM FUNCIONARIO)
Adequei a minha realidade, porém, esta expressão retorna apenas o maior valor.
O que eu preciso que retorne é o maior valor por produto.
Muito Obrigado!!!
GOSTEI 0
Lourival Queiroz
06/05/2016
Esta função te atende perfeitamente, foi feita para outra solicitação aqui dentro grupo.
select a.data_entrada, a.Item, a.Preco
from (select data_entrada, Item, preco,
rank() OVER (PARTITION BY Item
ORDER BY data_entrada desc) as Ranking
from nfentrada) a
where a.Ranking = 1
GOSTEI 0
Pedro Junior
06/05/2016
Obrigado Lourival!
A expressão ficou:
SELECT CODPROD, CUSGER
FROM (SELECT CODPROD, CUSGER,
RANK() OVER (PARTITION BY CUSGER
ORDER BY CODPROD DESC) AS RANKING
FROM TGFCUS) A
WHERE RANKING = 1
ORDER BY CODPROD
Está retornando várias vezes os mesmos produtos com custos diferentes. Eu gostaria que retornasse apenas uma linha por produto com o valor do maior custo de entrada.
Acredito que seja apenas alguma adequação na expressão que você passou.
Muito obrigado!
A expressão ficou:
SELECT CODPROD, CUSGER
FROM (SELECT CODPROD, CUSGER,
RANK() OVER (PARTITION BY CUSGER
ORDER BY CODPROD DESC) AS RANKING
FROM TGFCUS) A
WHERE RANKING = 1
ORDER BY CODPROD
Está retornando várias vezes os mesmos produtos com custos diferentes. Eu gostaria que retornasse apenas uma linha por produto com o valor do maior custo de entrada.
Acredito que seja apenas alguma adequação na expressão que você passou.
Muito obrigado!
GOSTEI 0
Alex Lekao
06/05/2016
Bom...
Entao aqui uso sql server, mas acredito que funcione basicamente igual no Oracle.
Tente assim:
Eu utilizo basicamente assim, nao sei se deu para entender o conceito.
Entao aqui uso sql server, mas acredito que funcione basicamente igual no Oracle.
Tente assim:
select
campo1,
campo2,
(select
max(preco)
from itemvdaproduto
where itemvdaproduto.codigo = produto.codigo) as maiorvalor
from produto
Eu utilizo basicamente assim, nao sei se deu para entender o conceito.
GOSTEI 0
Pedro Junior
06/05/2016
Olá!
Se eu testar apenas o subselect ele funciona retornando apenas o maior.
SELECT MAX(Custo.Produto) FROM Custos
Se eu testar o select inteiro ele não funciona.
SELECT
Codigo_Produto,
Custo_Produto,
(SELECT MAX(Custo_Produto)
FROM Custos
WHERE Custos.CodigoProduto = Produtos.Codigo_Produto AS MAIORVALOR
FROM Produtos
Ele retorna
General SQL error.
ORA-00921: fim inesperado do comando SQL.
Obrigado!
Se eu testar apenas o subselect ele funciona retornando apenas o maior.
SELECT MAX(Custo.Produto) FROM Custos
Se eu testar o select inteiro ele não funciona.
SELECT
Codigo_Produto,
Custo_Produto,
(SELECT MAX(Custo_Produto)
FROM Custos
WHERE Custos.CodigoProduto = Produtos.Codigo_Produto AS MAIORVALOR
FROM Produtos
Ele retorna
General SQL error.
ORA-00921: fim inesperado do comando SQL.
Obrigado!
GOSTEI 0
Alex Lekao
06/05/2016
faltou fechar o parentese no final WHERE Custos.CodigoProduto = Produtos.Codigo_Produto, WHERE Custos.CodigoProduto = Produtos.Codigo_Produto)
GOSTEI 0
Pedro Junior
06/05/2016
Olá!
Corrigi a expressão e o resultado não foi positivo. Comecei a desconfiar que pudesse ser algo que não fosse a consulta.
Passei a usar o PL/SQL para fazer a consulta no banco e alterei a expressão para:
select
'custos.codigo_produto',
'custos.custo_entrada',
(select max('custos.custo_entrada')
from 'custos'
where 'custos.codigo.produto' = 'produtos.codigo_produto') as maiorvalor
from 'produtos'
Agora é saber como chamar a tabela, porque eu uso aquele quadrinho que abre para selecionar a tabela e depois na hora do F8 ele dá:
ORA-00903: nome da tabela inválido.
Obrigado!
Corrigi a expressão e o resultado não foi positivo. Comecei a desconfiar que pudesse ser algo que não fosse a consulta.
Passei a usar o PL/SQL para fazer a consulta no banco e alterei a expressão para:
select
'custos.codigo_produto',
'custos.custo_entrada',
(select max('custos.custo_entrada')
from 'custos'
where 'custos.codigo.produto' = 'produtos.codigo_produto') as maiorvalor
from 'produtos'
Agora é saber como chamar a tabela, porque eu uso aquele quadrinho que abre para selecionar a tabela e depois na hora do F8 ele dá:
ORA-00903: nome da tabela inválido.
Obrigado!
GOSTEI 0
Alex Lekao
06/05/2016
blz.
bom, eu uso sql server, e ja faco uso desta forma a bastante tempo, encontro ultimos custos, ultimas vendas e compras, ultimos fornecedores, etc., alem de maiores valores como eh o seu caso.
so mudo para top 1 e ordeno decrescente ou algo do tipo.
Mas como nao manjo de oracle vou fica devendo alguma ajuda a mais.
bom, eu uso sql server, e ja faco uso desta forma a bastante tempo, encontro ultimos custos, ultimas vendas e compras, ultimos fornecedores, etc., alem de maiores valores como eh o seu caso.
so mudo para top 1 e ordeno decrescente ou algo do tipo.
Mas como nao manjo de oracle vou fica devendo alguma ajuda a mais.
GOSTEI 0
Pedro Junior
06/05/2016
Gostaria de agradecer a atenção e publicar a expressão que deu certo.
SELECT
CUSTOS.CODIGO_PRODUTO,
MAX(CUSTOS.CUSTO_ENTRADA) AS MAIOR_VALOR
FROM CUSTOS, PRODUTOS
WHERE CUSTOS.CODIGO_PRODUTO = PRODUTOS.CODIGO_PRODUTO
GROUP BY CUSTOS.CODIGO_PRODUTO
ORDER BY PRODUTOS.CODIGO_PRODUTO ASC
Forte abraço para Tadeu Granemann que me ajudou a desvendar este mistério.
[url]https://www.facebook.com/tadeugranemann[/url]
Muito Obrigado!
SELECT
CUSTOS.CODIGO_PRODUTO,
MAX(CUSTOS.CUSTO_ENTRADA) AS MAIOR_VALOR
FROM CUSTOS, PRODUTOS
WHERE CUSTOS.CODIGO_PRODUTO = PRODUTOS.CODIGO_PRODUTO
GROUP BY CUSTOS.CODIGO_PRODUTO
ORDER BY PRODUTOS.CODIGO_PRODUTO ASC
Forte abraço para Tadeu Granemann que me ajudou a desvendar este mistério.
[url]https://www.facebook.com/tadeugranemann[/url]
Muito Obrigado!
GOSTEI 0