AJUDA COM SQL -AGRUPAR E PEGAR REGITRO MAIS RECENT

MAXCIM 14/02/2011 18:56:13
#365424
olá amigos to quebranco cabeça, pra montar um SQL.

tenho a tabela produtos e a tabela cotação, preciso fazer um select que traga todos os produtos de um fornecedor e sua ultima cotação.
a tabela cotação tem varios itens repetidos, alterando apenas data e valor.

estou fazendo um inner join entre as duas, porem ele me traz apenas a 1ª cotação ( a mais antiga) e eu preciso da mais recente.
o order by dtcota desc não resolveu.. pq ele ordena apos a junção..

a sql tem que retornar apenas o ultimo valor....


conto com a ajuda de vcs... pois passei o dia todo pra resolver essa parada e nada!
LLAIA 14/02/2011 19:33:10
#365426
Poxa cara, posta aí a estrutura das duas tabelas e um modelo simples de como vc quer pra evitar tiros no escuro da galera. As vezes isso acontece muito.
MAXCIM 15/02/2011 08:29:05
#365458
A 1ª tabela é produtos por fornecedor, nela consta IDPRO e IDFOR, a 2ª tabela anexada são as cotaçoes, onde se repete IDPRO e IDFOR ( ligados pelo INNER JOIN).

O SELECT fará a busca na tabela produtos por Fornecedor, trazendo todos os fornecedores correspondente ao produto e sua ullima cotação.
reparem que algums produtos estão repetidos... devo pegar o ultimo valor de cada produto.
PARREIRA 15/02/2011 08:57:13
#365461
Posta seu select para mim dar uma olhada?
MAXCIM 15/02/2011 09:34:29
#365467
sql usada
tbl_cad_prod_mp_for = Produto pro fornecedor
MPFORTP = tabela de preço de Produto pro fornecedor

SELECT MPFORTP.* FROM tbl_cad_prod_mp_for CADMPFORN
INNER JOIN tbl_cad_prod_mp_for_TB MPFORTP ON(MPFORTP.idpro=CADMPFORN.idpro) AND (MPFORTP.idfor =MPFORTP.idfor)
WHERE CADMPFORN.idpro =98 ;
PARREIRA 15/02/2011 09:54:19
#365472
Certo,deixa eu entender direito,este select no caso teria de retornar somente a linha que contem a ultima data e o maior valor?
MAXCIM 15/02/2011 10:07:59
#365480
o select deve retornar todos os produtos ( mais de um produto por fornrecedor ( sem repetir o produto) e sua respectiva cotação ( que é o registro com data mais recente)
como há varias cotaçoes para varios produtos, deve retornar apenas 1 cotação por produto.

o inner join citado acima , usando GROUP BY retornar apenas 1... porem aontando para o primeiro registro ( mais antigo) e preciso que move para o ultimo ( mais recente)
PARREIRA 15/02/2011 10:14:09
#365481
Certo ,agora estou entendendo,então ele retorna todos produtos cada qual com a cotação mais recente,mas se ele tiver mais de uma cotação no dia,qual eu trago ,a maior?
MAXCIM 15/02/2011 10:28:50
#365485
geralmente não há mais de uma cotação por dia, os precos são cotados semanalmente... se isso acontecer eu mudo de DATE para DATETIME e assim pego o maior em data e horário.
PARREIRA 15/02/2011 10:43:41
#365486
Resposta escolhida
SELECT DISTINCT
A.* ,
(SELECT TOP 1 C.MDATA FROM tbl_cad_prod_mp_for_TB AS C WHERE C.idpro = A.idpro AND C.idfor = A.idfor ORDER BY C.MDATA DESC) AS MDATA

FROM
tbl_cad_prod_mp_for AS A
INNER JOIN tbl_cad_prod_mp_for_TB AS B ON
A.idpro = B.idpro AND A.idfor = B.idfor
WHERE
A.idpro =98 ;

TENTA ISSO E ME AVISA.
Página 1 de 2 [16 registro(s)]
Tópico encerrado , respostas não são mais permitidas