Fórum SQL server - Mostrar a ultima data #571609
25/11/2016
0
Boa tarde pessoal,
Estou com a seguinte situação.
Estou montando um relatório de estoque aonde preciso saber alguns dados básicos como (nome do produto, valor, estoque atual, valor adicionado do estoque...)
Apos fazer as ligações necessárias(INNER JOIN) entre as tabelas que preciso colher informações. consegui montar todos os campos que vou precisar.
Apareceu a seguinte situação, O mesmo produto aparecendo varias vezes,
LOCALESTOQUE DATAMOVIMENTO PRODUTO SALDOANTERIOR ADI-SUB ESTOQUE
Farmacia IMOL 2016-02-29 00:00:00.000 INDICADOR QUIMICO CLASSE 5 4.0000 -4.0000
Farmacia IMOL 2016-04-13 00:00:00.000 INDICADOR QUIMICO CLASSE 5 0.0000 1.0000
Farmacia IMOL 2016-04-13 00:00:00.000 INDICADOR QUIMICO CLASSE 5 1.0000 -1.0000
Farmacia IMOL 2016-09-09 00:00:00.000 INDICADOR QUIMICO CLASSE 5 0.0000 250.0000
Estoque ADM 2016-01-05 00:00:00.000 ADOCANTE 12.0000 10.0000
Estoque ADM 2016-03-02 00:00:00.000 ADOCANTE 22.0000 -22.0000
Estoque ADM 2016-04-06 00:00:00.000 ADOCANTE 0.0000 7.0000
Quando na verdade preciso apenas da linha com a data mais recente.
LOCALESTOQUE DATAMOVIMENTO PRODUTO SALDOANTERIOR ADI-SUB ESTOQUE
Farmacia IMOL 2016-09-09 00:00:00.000 INDICADOR QUIMICO CLASSE 5 0.0000 250.0000
Estoque ADM 2016-04-06 00:00:00.000 ADOCANTE 0.0000 7.0000
Tentei usar o função MAX com comando GROUP BY , no entanto eu perco todos os meus campos para alcançar o resultado desejado.
Poderiam me ajudar a chegar neste resultado sem perder meus campos ?
Segue imagem do codigo e o resultado completo da consulta.
http://pt-br.tinypic.com/view.php?pic=1zmf53m&s=9#.WDhtzvkrKUk
consulta
SELECT TLOC.NOME 'LOCALESTOQUE', TRELSLD.DATAMOVIMENTO, TPRODUTO.NOMEFANTASIA 'PRODUTO', TRELSLD.SALDOANTERIOR,
TRELSLD.QTDECOMSINAL 'ADI-SUB ESTOQUE',SALDOANTERIOR + QTDECOMSINAL 'SALDOTOTAL',
TRELSLD.ULTIMOCUSTOUNITARIO 'CUSTOUNITARIO',TRELSLD.ULTIMOCUSTOUNITARIO * TRELSLD.QTDECOMSINAL 'TOTALFINAN', TPRODUTO.IDPRD,
TMOV.CODTMV, TRELSLD.TOTALMOV
FROM TRELSLD
INNER JOIN TPRODUTO (NOLOCK) ON
TPRODUTO.IDPRD = TRELSLD.IDPRD
INNER JOIN TLOC (NOLOCK) ON
TLOC.CODFILIAL = TRELSLD.CODFILIAL
AND TLOC.CODLOC = TRELSLD.CODLOC
INNER JOIN TMOV (NOLOCK) ON
TMOV.IDMOV = TRELSLD.IDMOV
WHERE TRELSLD.DATAMOVIMENTO BETWEEN '2016-01-01' AND '2016-11-01'
ORDER BY TPRODUTO.NOMEFANTASIA
Estou com a seguinte situação.
Estou montando um relatório de estoque aonde preciso saber alguns dados básicos como (nome do produto, valor, estoque atual, valor adicionado do estoque...)
Apos fazer as ligações necessárias(INNER JOIN) entre as tabelas que preciso colher informações. consegui montar todos os campos que vou precisar.
Apareceu a seguinte situação, O mesmo produto aparecendo varias vezes,
LOCALESTOQUE DATAMOVIMENTO PRODUTO SALDOANTERIOR ADI-SUB ESTOQUE
Farmacia IMOL 2016-02-29 00:00:00.000 INDICADOR QUIMICO CLASSE 5 4.0000 -4.0000
Farmacia IMOL 2016-04-13 00:00:00.000 INDICADOR QUIMICO CLASSE 5 0.0000 1.0000
Farmacia IMOL 2016-04-13 00:00:00.000 INDICADOR QUIMICO CLASSE 5 1.0000 -1.0000
Farmacia IMOL 2016-09-09 00:00:00.000 INDICADOR QUIMICO CLASSE 5 0.0000 250.0000
Estoque ADM 2016-01-05 00:00:00.000 ADOCANTE 12.0000 10.0000
Estoque ADM 2016-03-02 00:00:00.000 ADOCANTE 22.0000 -22.0000
Estoque ADM 2016-04-06 00:00:00.000 ADOCANTE 0.0000 7.0000
Quando na verdade preciso apenas da linha com a data mais recente.
LOCALESTOQUE DATAMOVIMENTO PRODUTO SALDOANTERIOR ADI-SUB ESTOQUE
Farmacia IMOL 2016-09-09 00:00:00.000 INDICADOR QUIMICO CLASSE 5 0.0000 250.0000
Estoque ADM 2016-04-06 00:00:00.000 ADOCANTE 0.0000 7.0000
Tentei usar o função MAX com comando GROUP BY , no entanto eu perco todos os meus campos para alcançar o resultado desejado.
Poderiam me ajudar a chegar neste resultado sem perder meus campos ?
Segue imagem do codigo e o resultado completo da consulta.
http://pt-br.tinypic.com/view.php?pic=1zmf53m&s=9#.WDhtzvkrKUk
consulta
SELECT TLOC.NOME 'LOCALESTOQUE', TRELSLD.DATAMOVIMENTO, TPRODUTO.NOMEFANTASIA 'PRODUTO', TRELSLD.SALDOANTERIOR,
TRELSLD.QTDECOMSINAL 'ADI-SUB ESTOQUE',SALDOANTERIOR + QTDECOMSINAL 'SALDOTOTAL',
TRELSLD.ULTIMOCUSTOUNITARIO 'CUSTOUNITARIO',TRELSLD.ULTIMOCUSTOUNITARIO * TRELSLD.QTDECOMSINAL 'TOTALFINAN', TPRODUTO.IDPRD,
TMOV.CODTMV, TRELSLD.TOTALMOV
FROM TRELSLD
INNER JOIN TPRODUTO (NOLOCK) ON
TPRODUTO.IDPRD = TRELSLD.IDPRD
INNER JOIN TLOC (NOLOCK) ON
TLOC.CODFILIAL = TRELSLD.CODFILIAL
AND TLOC.CODLOC = TRELSLD.CODLOC
INNER JOIN TMOV (NOLOCK) ON
TMOV.IDMOV = TRELSLD.IDMOV
WHERE TRELSLD.DATAMOVIMENTO BETWEEN '2016-01-01' AND '2016-11-01'
ORDER BY TPRODUTO.NOMEFANTASIA
Libio Souza
Curtir tópico
+ 0
Responder
Posts
25/11/2016
Jones Granatyr
Opa! Como seu objetivo é selecionar mais dados da tabela de produtos, talvez seja melhor se você inverter a lógica do SQL e fazer o "from" pelo produto
Responder
Gostei + 0
25/11/2016
Alec Candia
Nesse caso, eu abandonaria o JOIN e recorreria a um SUB SELECT.
Usaria o TOP(1) para selecionar apenas o primeiro valor e a ORDER BY seria por DATA DESC
Não sei se consegui me expressar bem, mas acredito ser mais fácil de controlar os dados que tu precisa.
Abraço
Usaria o TOP(1) para selecionar apenas o primeiro valor e a ORDER BY seria por DATA DESC
Não sei se consegui me expressar bem, mas acredito ser mais fácil de controlar os dados que tu precisa.
Abraço
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)