Registros da tabela 1 que não existem na tabela 2 em determinada condição na tabela 2

07/06/2018

0

Olá Colegas.
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

Junior

Responder

Post mais votado

07/06/2018

criei as tabelas conforme a estrutura que você passou; preenchi os dados como você demonstrou; executei a query que você publicou e o resultado foi o esperado:

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

Emerson Nascimento
Responder

Mais Posts

07/06/2018

Emerson Nascimento

tente assim:
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'


Responder

07/06/2018

Junior

Emerson,
Muito obrigado! Já me ajudou bastante!
Responder

07/06/2018

Junior

Emerson,
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
Responder

07/06/2018

Emerson Nascimento

e cadê a consulta que você utilizou?
Responder

07/06/2018

Junior

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''
Responder

07/06/2018

Emerson Nascimento

agora precisa saber se o seus campos de data são somente data ou data e hora.
Responder

07/06/2018

Junior

Emerson,
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!
Responder

08/06/2018

Junior

Emerson,

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''

Responder

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

Aceitar