SQL Server - Select Max

27/08/2015

0

Preciso fazer uma SQL onde eu tenho duas tabelas, uma de produto e uma com a movimentação do custo desses produtos e preciso que me retorne apenas 1 linha para cada produto com o valor do custo da maior data. Exe.

TABELA PRODUTOS TABELA CUSTO RESULTADO
Cod. Descr Cod.Prod. Data Vlr.Custo Cod.Prod. Descr Data Vlr.Custo
1 PRODUTO UM 1 01/01/2015 10,00 1 PRODUTO UM 10/02/2015 30,00
2 PRODUTO DOIS 1 05/01/2015 20,00 2 PRODUTO DOIS 10/02/2015 15,00
3 PODUTO TRES 1 10/02/2015 30,00 3 PRODUTO TRES 0,00
2 10/01/2015 15,00
Priscila Cardoso

Priscila Cardoso

Responder

Posts

27/08/2015

Alan Mario

Em duas tabelas mesmo?

Tentar pegar esse exemplo [url]https://www.devmedia.com.br/forum/select-max-em-mais-de-uma-coluna/12712[/url]
Responder

29/08/2015

Priscila Cardoso

Sim, em 2 tabelas. É que no exemplo depois que postei, juntou tudo, mas vou tentar exemplificar novamente:

TABELA PRODUTOS
COD DESCR
1 PRODUTO UM
2 PRODUTO DOIS
3 PRODUTO TRES

TABELA CUSTOS
COD.PROD. DATA CUSTO
1 01/01/2015 10,00
1 10/01/2015 15,00
1 15/02/2015 20,00
2 01/01/2015 50,00

TABELA RESULTADOS
COD.PROD. DATA CUSTO
1 15/02/2015 20,00
2 01/01/2015 50,00
3 0,00

Eu preciso dessa tabela de resultado. Agradeço muito se vc puder me ajudar.
Responder

01/09/2015

Alan Mario

É que eu não tentei fazer, mas pelo link que postei te um norte de como fazer?
Responder

01/09/2015

Randrade

Você pode utilizar este código para fazer o que deseja. Alterei apenas o nome das colunas.

Select c.produtoid, c.dt, c.valor
from custo c
inner join 
(SELECT produtoid,MAX(dt) as max_date
FROM custo
WHERE valor > 0
GROUP BY produtoid)a
on a.produtoid = c.produtoid and a.max_date = dt


[url:descricao=Neste link você encontrará um exemplo funcional.]http://sqlfiddle.com/#!3/3fd55/1[/url]

Se precisar de explicação do código, avisa que explico aqui.
Responder

01/09/2015

Alan Mario

Se não for pedir demais, pedir antecipadamente uma explicação, pode ser da forma mais simples.
Responder

02/09/2015

Randrade

Se não for pedir demais, pedir antecipadamente uma explicação, pode ser da forma mais simples.


Olá Alan,
posso explica sim. É que ontem eu estava sem tempo, aí postei o código apenas para ajudar a autora da pergunta. Mas vamos lá.

Nesta parte do código, eu seleciono o id do produto e a data máxima do produto onde o valor seja maior que 0 (WHERE valor > 0). Esse select me retorna apenas o produto que tiver a maior data:
SELECT produtoid,MAX(dt) as max_date
FROM custo
WHERE valor > 0
GROUP BY produtoid

Feito isso, eu faço um Inner Join da tabela custo com o select. Isso me possibilita retornar os dados da tabela custo também.
use testes
Select c.produtoid, c.dt, c.valor
from custo c
inner join 
(SELECT produtoid,MAX(dt) as max_date
FROM custo
WHERE valor > 0
GROUP BY produtoid)a
on a.produtoid = c.produtoid and a.max_date = dt


Como estou utilizando um Inner Join, ele irá me retornar o custo apenas dos produtos retornados no select acima.

Caso a explicação esteja "um pouco" confusa, me avise que tento simplificar mais.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar