Trazer somente o ultimo produto comprado

03/05/2019

12

Olá,

Estou montando um comando e preciso que o sistema liste apenas a ultima compra feita para aquele devido produto, ou seja
somente o produto que tenha a data maior
exemplo quando o a.datalctofis for o maior para aquele devido produto.

  select a.DATALCTOFIS as Data_Entrada, a.CODIGOPRODUTO as CodigoProduto_Saida, c.DESCRPRODUTO ,a.CODIGOCFOP,a.VALORUNITARIO,  
b.DATALCTOFIS as Data_Saida , b.CODIGOPRODUTO as CodigoProduto_Saida, b.CODIGOCFOP,b.VALORUNITARIO, (b.valorunitario-a.valorunitario)as custo
,case
 c.TIPOMEDICAMENTO
 WHEN 0 THEN ''''SIMILAR''''
    when 1 Then ''''GENERICO''''
    WHEN 2 THEN ''''REFERENCIA''''
 END AS MEDICAMENTO ,
 CASE  C.CDANTITEM 
WHEN ''''OUTROS'''' THEN ''''OUTROS'''' end      as MEDICAMENTO_OUTROS ,
CASE  C.CODIGOGRUPOPRODUTO
 WHEN 14 THEN ''''BEBIDAS_ALCOOLICAS''''
    WHEN 2 THEN ''''MERCADORIA''''
     end     AS SEGMENTACAO
from LCTOFISENTPRODUTO a , LCTOFISsaiPRODUTO b  , produto c  
where a.codigoempresa = 65 and a.datalctofis between ''''2018-01-01'''' and ''''2018-01-31'''' 
and a.codigoempresa=b.codigoempresa  and a.codigoproduto = b.codigoproduto  
   and a.codigoproduto=c.codigoproduto    and a.codigoempresa=c.codigoempresa
Responder

Post mais votado

03/05/2019

Boa tarde,

Tente ordenar pela data com DESC (order by a.datalctofis desc) e depois pegue a primeira linha (select first 1).


Olá,

Estou montando um comando e preciso que o sistema liste apenas a ultima compra feita para aquele devido produto, ou seja
somente o produto que tenha a data maior
exemplo quando o a.datalctofis for o maior para aquele devido produto.

select a.DATALCTOFIS as Data_Entrada, a.CODIGOPRODUTO as CodigoProduto_Saida, c.DESCRPRODUTO ,a.CODIGOCFOP,a.VALORUNITARIO,
b.DATALCTOFIS as Data_Saida , b.CODIGOPRODUTO as CodigoProduto_Saida, b.CODIGOCFOP,b.VALORUNITARIO, (b.valorunitario-a.valorunitario)as custo
,case
c.TIPOMEDICAMENTO
WHEN 0 THEN ''''SIMILAR''''
when 1 Then ''''GENERICO''''
WHEN 2 THEN ''''REFERENCIA''''
END AS MEDICAMENTO ,
CASE C.CDANTITEM
WHEN ''''OUTROS'''' THEN ''''OUTROS'''' end as MEDICAMENTO_OUTROS ,
CASE C.CODIGOGRUPOPRODUTO
WHEN 14 THEN ''''BEBIDAS_ALCOOLICAS''''
WHEN 2 THEN ''''MERCADORIA''''
end AS SEGMENTACAO
from LCTOFISENTPRODUTO a , LCTOFISsaiPRODUTO b , produto c
where a.codigoempresa = 65 and a.datalctofis between ''''2018-01-01'''' and ''''2018-01-31''''
and a.codigoempresa=b.codigoempresa and a.codigoproduto = b.codigoproduto
and a.codigoproduto=c.codigoproduto and a.codigoempresa=c.codigoempresa
Responder

Mais Posts

Respondendo à tua pergunta, deve ser algo assim:
select
	a.DATALCTOFIS as Data_Entrada,
	a.CODIGOPRODUTO as CodigoProduto_Saida,
	c.DESCRPRODUTO, a.CODIGOCFOP, a.VALORUNITARIO,
	b.DATALCTOFIS as Data_Saida,
	b.CODIGOPRODUTO as CodigoProduto_Saida,
	b.CODIGOCFOP, b.VALORUNITARIO, (b.valorunitario-a.valorunitario) as custo,
	case c.TIPOMEDICAMENTO
		WHEN 0 THEN 'SIMILAR'
		WHEN 1 THEN 'GENERICO'
		WHEN 2 THEN 'REFERENCIA'
	end AS MEDICAMENTO,
	case C.CDANTITEM 
		WHEN 'OUTROS' THEN 'OUTROS'
	end as MEDICAMENTO_OUTROS,
	case C.CODIGOGRUPOPRODUTO
		WHEN 14 THEN 'BEBIDAS_ALCOOLICAS'
		WHEN 2 THEN 'MERCADORIA'
	end AS SEGMENTACAO
from
	LCTOFISENTPRODUTO a
inner join (
	select codigoempresa, codigoproduto, max(a.DATALCTOFIS) ultcompra
	from LCTOFISENTPRODUTO
	group by codigoempresa, codigoproduto
	) uc on uc.codigoempresa=a.codigoempresa and uc.codigoproduto=a.codigoproduto and uc.ultcompra=a.DATALCTOFIS
inner join
	LCTOFISsaiPRODUTO b on b.codigoempresa=a.codigoempresa and b.codigoproduto=a.codigoproduto
inner join
	produto c on c.codigoproduto=a.codigoproduto and c.codigoempresa=a.codigoempresa
where
	a.codigoempresa = 65
	and a.datalctofis between '2018-01-01' and '2018-01-31'

Mas é realmente disto que você precisa? O filtro de datas está na tabela correta?
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira