Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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,3simplifiquei um pouco mais o relacionamento das tabelas e funcionou dessa forma:
WITH UL As(select sai.cliente, max(sai.data) as ultima_data from saidas sai where sai.data BETWEEN '01/01/16' AND '03/29/16' group by sai.cliente)
select
cli.cliente,
cli.cod_cliente,
cli.nome,
fun.nome as consultor,
s.data as data_ultima_compra,
sum(s.valor_final) as vl_ultima_compra
from clientes cli
left join UL on UL.cliente = cli.cliente
left join saidas s on s.cliente = UL.cliente and s.data = UL.ultima_data
left join funcionarios fun on fun.funcionario = cli.funcionario
group by 1,2,3,4,5
faria duas queries com union