Ultima compra do cliente com Firebird
Estou tentando listar todos os meus clientes indiferente se ele comprou ou não, mais se ele tem alguma compra mostrar a data e o valor somente da ultima compra.
Fiz um código para isso mais não esta funcionando:
SELECT c.cod_cliente, c.nome, filtro.data , filtro.vl_produto
from clientes c
LEFT JOIN (
WITH L2 As (
SELECT s.cliente as cli, MAX(n.data) As UltimaData
FROM produtos_eventos pe
inner join saidas s on s.saida = pe.cod_operacao
inner join nf n on n.cod_operacao = s.saida and n.tipo_operacao = s.tipo_operacao_s and n.cancelada = 'F'
inner join cfop cf on cf.cfop = pe.cfop
left join funcionarios fun on fun.funcionario = s.funcionario
where s.data BETWEEN '01/01/16' AND '03/29/16'
and pe.quantidade <> 0
and cf.nat_operacao in('5.101','6.101','5.102','5.403','6.102','6.107','6.108','6.403','5.551','6.551','5.933','6.933','7.551','6.108','6.109','6.110','7.101','7.102')
GROUP BY s.cliente)
SELECT s.cliente, c.nome, n.data, sum ((pe.total_liquido + pe.v_ipi + pe.v_icmss) - pe.desc_suframa) as vl_produto
FROM produtos_eventos pe
inner join saidas s on s.saida = pe.cod_operacao
inner join nf n on n.cod_operacao = s.saida and n.tipo_operacao = s.tipo_operacao_s and n.cancelada = 'F'
inner join cfop cf on cf.cfop = pe.cfop
inner join clientes c on c.cliente = s.cliente
INNER JOIN L2 ON s.cliente = L2.cli AND n.data = L2.UltimaData
left join funcionarios fun on fun.funcionario = s.funcionario
where s.data BETWEEN '01/01/16' AND '03/29/16'
and pe.quantidade <> 0
and cf.nat_operacao in('5.101','6.101','5.102','5.403','6.102','6.107','6.108','6.403','5.551','6.551','5.933','6.933','7.551','6.108','6.109','6.110','7.101','7.102')
group by 1,2,3) as filtro on filtro.cliente = c.cliente
Discussão (2)
Carregando comentários...