GARANTIR DESCONTO

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
Libio Souza

Libio Souza

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
Responder

Gostei + 0

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

Aceitar