AJUDA COM SQL -AGRUPAR E PEGAR REGITRO MAIS RECENT
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!
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!
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.
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.
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.
Posta seu select para mim dar uma olhada?
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 ;
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 ;
Certo,deixa eu entender direito,este select no caso teria de retornar somente a linha que contem a ultima data e o maior valor?
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)
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)
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?
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.
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.
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.
Tópico encerrado , respostas não são mais permitidas