SQL PARA COTACAO DE PRODUTOS

SUPORTEFAC 10/04/2012 13:42:03
#399462
Boa tarde pessoal.

Fiz varias pesquisas e não obtive exito... também de todos os jeitos que [ô]eu[ô] pude tentar, agora estou recorrendo a vocês, espero que possam me ajudar.

Seguinte, estou desenvolvendo uma aplicação pra cotações de produtos.
Nesta aplicações possuo as seguintes tabelas

COTAPRECO - Onde guardo os preços dos produtos de cada fornecedor
PRODUTOS - Cadastro do Produto
FORNECEDORES - Cadastro de Fornecedores.

Na tabela COTAPRECO tenho os seguinte campos..
CODFOR - Código do Fornecedor
CODPRO - Código do Produto
CUSTO - Preço do Produto do determinado fornecedor
DATA - Data que cadastrou
HORA - Hora que cadastrou

Quero um SQL que faça o seguinte, link os codigos de fornecedores e produtos para pegar as descrições, e separar o preço menor de cada fornecedor. Até aí consegui fazer com este código.


select b.codfor, b.codpro, b.custo, b.data, b.hora, produtos.PRODUTO, produtos.codbarra, fornecedores.razao
from cotapreco as b
INNER JOIN produtos ON (b.codpro = produtos.lanca)
inner join fornecedores ON (b.codfor = fornecedores.lanca)
where
b.custo = (select min(a.custo) from cotapreco as a where a.codpro = b.codpro)
order by produtos.produto;


Porém se tiver um produto com preço igual entre mais de um fornecedor, estes produtos aparecem duplicados, e eu queria que aparecece o fornecedor que lanço o preço primeiro (data e hora menor). Seré que deu pra entender? ;P

Conto com a ajuda de vocês!
FFCOUTO 10/04/2012 15:43:12
#399488
Tenta a consulta abaixo:

select b.codfor, b.codpro, b.custo, b.data, b.hora, produtos.PRODUTO, produtos.codbarra, fornecedores.razao
from cotapreco as b
INNER JOIN produtos ON (b.codpro = produtos.lanca)
inner join fornecedores ON (b.codfor = fornecedores.lanca)
where
b.custo = (select [txt-color=#0000f0]TOP 1[/txt-color] min(a.custo) from cotapreco as a where a.codpro = b.codpro [txt-color=#0000f0]ORDER BY DATA, HORA[/txt-color])
order by produtos.produto;

SUPORTEFAC 10/04/2012 18:43:24
#399513
Não deu certo Fabiano!

Esqueci de mencionar mas o banco é MYSQL 5.1, fico no aguarde de alguma coisa que possa me ajudar!
Mas lhe agradeço a atenção!

Abraço!
KERPLUNK 10/04/2012 18:55:11
#399514
Assim, deve funcionar:

select b.codfor, b.codpro, b.custo, b.data, b.hora, produtos.PRODUTO, produtos.codbarra, fornecedores.razao
from cotapreco as b
INNER JOIN produtos ON (b.codpro = produtos.lanca)
inner join fornecedores ON (b.codfor = fornecedores.lanca)
where
b.custo = (select min(a.custo) from cotapreco as a where a.codpro = b.codpro ORDER BY DATA, HORA limit 1)
order by produtos.produto;
MGALDINO 10/04/2012 18:56:23
#399515
Coloca um Group By...


select b.codfor, b.codpro, b.custo, b.data, b.hora, produtos.PRODUTO, produtos.codbarra, fornecedores.razao
from cotapreco as b
INNER JOIN produtos ON (b.codpro = produtos.lanca)
inner join fornecedores ON (b.codfor = fornecedores.lanca)
where
b.custo = (select min(a.custo) from cotapreco as a where a.codpro = b.codpro)
order by produtos.produto
Group By b.codfor, b.codpro, b.custo, b.data, b.hora, produtos.PRODUTO, produtos.codbarra, fornecedores.razao
SUPORTEFAC 10/04/2012 19:00:42
#399517
Ainda não deu certo pessoal, continua aparecendo os dois fornecedores que tem o preço igual...
teria alguma outra forma?

mas agradeço a atenção..
SUPORTEFAC 11/04/2012 06:36:39
#399539
Alguém ???
SUPORTEFAC 11/04/2012 14:29:02
#399604
Rasguei uma noite quebrando a cabeça! Mas consegui uma solução!

Segue a baixo pra quem tiver o mesmo problema posteriormente

 SELECT a.CODFOR, a.CODPRO, a.CUSTO, a.LANCA, a.DATA, a.HORA, p.PRODUTO, p.CODBARRA, f.RAZAO 
FROM COTAPRECO as a
INNER JOIN produtos as p ON (a.CODPRO = p.LANCA)
INNER JOIN fornecedores AS f ON (a.CODFOR = f.LANCA)
WHERE a.custo = (SELECT min(b.custo) from cotapreco as b WHERE(b.codpro = a.codpro))

GROUP BY a.codpro
having min(a.lanca);


Obrigado a todos que contribuiram!

Abraços
Tópico encerrado , respostas não são mais permitidas