Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho uma tabela com preços de fornecedores e preciso de um select que me retorne apenas o melhor preço do fornecedor conforme ilustra a imagem em anexo.
Obrigado amigo, o problema que tenho enfrentado usando MIN é que depois do agrupamento o FORNECEDOR se perde, considerando um fornecedor que não tem o melhor preço...
Usando MIN o fornecedor que deveria ser WalMart é Bate forte...
Publica seu sql e a estrutura da tabela.
Este abaixo carrega tudo sem agrupar;
SELECT
cotacao.CODPRODUTO,
cotacao.PRODUTO,
cotacao.CUSTO,
-- min(cotacao.CUSTO) as minimo,
cotacao.FORNECEDOR,
cotacao.`STATUS`,
cotacao.UV,
cotacao.`DATA`,
cotacao.ST_2
FROM
cotacao
WHERE
CUSTO > 0
AND `STATUS` = 1
-- GROUP BY 1
ORDER BY PRODUTO, CUSTO
Este agrupa;
SELECT
cotacao.CODPRODUTO,
cotacao.PRODUTO,
cotacao.CUSTO,
min(cotacao.CUSTO) as minimo,
cotacao.FORNECEDOR,
cotacao.`STATUS`,
cotacao.UV,
cotacao.`DATA`,
cotacao.ST_2
FROM
cotacao
WHERE
CUSTO > 0
AND `STATUS` = 1
GROUP BY 1
ORDER BY PRODUTO, CUSTO
Agora estou vendo se um procedimento armazenado usando um loop para cada código dará certo...
Grosso Modo serria
SELECT *
FROM
cotacao c1
WHERE
c1.CUSTO = (SELECT min(c2.CUSTO)
FROM
cotacao c2
WHERE
c2.CODPRODUTO = c1.CODPRODUTO)
Todavia usando as funções analíticas você pode montar um relatório melhor , tipo melhor preço, pior preço , média etc.Show, vou testar aqui, obrigado irmão! Testei e deu certo, valeu cara!!!
Veja se isto ajuda.
No caso fará com MIN.
Veja também o uso de funções analiticas , uso em Oracle não conheço detalhes do MySql todavia.
https://database.guide/max-find-the-maximum-value-in-a-column-in-mysql/