Registros da tabela 1 que não existem na tabela 2 em determinada condição na tabela 2
07/06/2018
0
Tenho duas tabelas. Uma de Clientes (clientes.codcli, clientes.nomcli, clientes.datacadastro) e Vendas (vendas.codcli e vendas.datacompra)
Como posso fazer um select que junte as duas tabelas e que apresente os campos:
clientes.codcli, clientes.nomecli, clientes.datacadastro, vendas.datacompra
onde o clientes.codcli = vendas.codcli
e cujo vendas.datacompra seja inferior a 01/06/2016
A ideia é listar todos os clientes com a data de sua última compra, mas que não compram deste 01/06/2016
Junior
Post mais votado
07/06/2018
codcli nomecli datacadastro ultcompra ----------- -------------------------------------------------- ------------ ---------- 1 A 2018-01-02 2018-02-03 2 B 2018-01-03 2018-02-05 (2 row(s) affected)
Emerson Nascimento
Mais Posts
07/06/2018
Emerson Nascimento
select c.codcli, c.nomecli, c.datacadastro, max(v.datacompra) ultcompra from clientes c left join vendas v on v.codcli = c.codcli group by c.codcli, c.nomecli, c.datacadastro having max(v.datacompra) < '2016-06-01'
07/06/2018
Junior
Agora eu consigo listar os dados, mas parece que vem cliente que também operou acima da data especificada.
Fiz um exemplo simples dos dados abaixo:
tabela clientes
codcli, nomecli, datacadastro
1 A 02/01/2018
2 B 03/01/2018
3 C 02/01/2018
tabela vendas
codcli, datacompra
1 02/02/2018
1 03/02/2018
2 04/02/2018
2 05/02/2018
3 02/02/2018
3 06/06/2018
Quero que a listagem me mostre somente os clientes que não operaram entre 01/06/2018 e 07/06/2018
O resultado deveria ser:
c.codcli, c.nomecli, c.datacadastro, v.datacompra
1 A 02/01/2018 03/02/2018
2 B 03/01/2018 05/02/2018
Não pode aparecer o cliente 3 porque embora ele tenha operado em 02/02/2018, é o único que operou em 06/06/2018.
Pelo teste que fiz, o select também acaba trazendo o cliente codcli = 3. Está trazendo o seguinte resultado:
c.codcli, c.nomecli, c.datacadastro, v.datacompra
1 A 02/01/2018 03/02/2018
2 B 03/01/2018 05/02/2018
3 C 02/01/2018 02/02/2018
07/06/2018
Junior
c.codcli, c.nomecli, c.datacadastro, max(v.datacompra) ultcompra
from clientes c
left join vendas v on v.codcli = c.codcli
group by c.codcli, c.nomecli, c.datacadastro
having max(v.datacompra) < ''2018-06-06''
07/06/2018
Emerson Nascimento
07/06/2018
Junior
Muito obrigado pela paciência! rsrsrs!
Fiquei bolado aqui porque no meu não trazia certo. Daí vi que no txt que salvei o comando acabei enfiando no group by também o campo v.datacompra.
select
c.codcli, c.nomecli, c.datacadastro, max(v.datacompra) ultcompra
from clientes c
left join vendas v on v.codcli = c.codcli
group by c.codcli, c.nomecli, c.datacadastro, v.datacompra
having max(v.datacompra) < ''2018-06-06''
Agora deu certo!!!
Obrigado mesmo!
08/06/2018
Junior
Sabe se consigo fazer um update nesse conjunto de registros obtidos deste select?
select
c.codcli, c.nomecli, c.datacadastro, max(v.datacompra) ultcompra
from clientes c
left join vendas v on v.codcli = c.codcli
group by c.codcli, c.nomecli, c.datacadastro
having max(v.datacompra) < ''2018-06-06''
Clique aqui para fazer login e interagir na Comunidade :)