Clipper On Line • Ver Tópico - Listar clientes com/sem movimento

Listar clientes com/sem movimento

Discussão sobre SQL

Moderador: Moderadores

 

Listar clientes com/sem movimento

Mensagempor JoséQuintas » 06 Jun 2020 18:07

Tenho uma opção no cadastro de clientes de listar com/sem movimento.

Estou na dúvida sobre como fazer isso.

Por enquanto pensei em duas alternativas:

SELECT ..., count( movimento.* ) // algo desse tipo

ou

SELECT .... WHERE CODIGO IN ( SELECT DISTINCT CODIGO FROM MOVIMENTO )

Alguma opção melhor?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Listar clientes com/sem movimento

Mensagempor JoséQuintas » 06 Jun 2020 18:31

Este funcionou

SELECT * FROM jpcadastro WHERE idcadastro IN ( SELECT DISTINCT nfcadastro FROM jpnotfis )

segundo o HeidiSQL, levou 0.016 segundos de servidor e 0.281 segundos de rede

já este, só por curiosidade

SELECT idcadastro FROM jpcadastro WHERE idcadastro IN ( SELECT DISTINCT nfcadastro FROM jpnotfis )

levou 0.156 segundos de servidor e 0.031 segundos de rede

fiz só por cusiosidade, pra ver o tempo de rede.
Não lembro de ter visto essa informação de rede antes.

Aproveitando..... fiz outro teste:
São 5.006 clientes.
Pra trazer TUDO de uma vez, 0.250 segundos em rede 100MB, 1/4 de segundo.

mysql.png


Um browse dos clientes tem menos informação que isso, portanto é mais rápido.
Ou seja, praticamente instantâneo mostrar todos os clientes na tela, e ficar passeando por todos eles.
1/4 de segundo e ficam servidor e rede livres.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Listar clientes com/sem movimento

Mensagempor lwinter » 06 Jun 2020 21:10

Oi Jose!
O sql trabalha com a teoria dos conjuntos. Voce pode fazer calculos matematicos com os conjuntos gerados.
Ex:
Considere uma query A como sendo os clientes cadastrados.
Considere uma query B como sendo os clientes movimentados em um periodo especifico.
Logo os clientes sem movimento sera:
C = A - B
Pronto, simples assim!
lwinter
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 123
Data de registro: 07 Mar 2011 12:08
Cidade/Estado: Campinas - SP
Curtiu: 1 vez
Mens.Curtidas: 12 vezes

Listar clientes com/sem movimento

Mensagempor lwinter » 06 Jun 2020 21:24

Sei que voces sao devs tarimbados, mas nao custa colocar aqui um ponto que pode ser proveitoso a alguns do forum.
Esqueci de dizer que a query dos clientes cadastrados precisa prever a data de inclusao do cliente, pois caso se deseje saber os clientes que nao movimentaram em um determinado mes de 01/mm a 30/mm nao podemos considerar os clientes cadastrados apos 30/mm, senao vai aparecer no resultado clientes que ainda nao faziam parte da empresa naquele periodo. Idem para clientes inativados. Eles podem estar inativados hoje mas na epoca ele estava inativo? Se voce guardar uma data da exlcusao da para prever isso na query de clientes cadastrados. Desta forma, a informacao fica mais confiavel.
lwinter
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 123
Data de registro: 07 Mar 2011 12:08
Cidade/Estado: Campinas - SP
Curtiu: 1 vez
Mens.Curtidas: 12 vezes

Listar clientes com/sem movimento

Mensagempor lwinter » 06 Jun 2020 21:27

Esta logica de C = A - B, vale tambem para qualquer situacao.
Exemplo:
Produtos sem movimentacao.
Clientes sem atendimento no helpdesk
etc...
lwinter
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 123
Data de registro: 07 Mar 2011 12:08
Cidade/Estado: Campinas - SP
Curtiu: 1 vez
Mens.Curtidas: 12 vezes

Listar clientes com/sem movimento

Mensagempor lwinter » 06 Jun 2020 21:31

Zé vi que voce esta usando a clausula distinct.
Uma vez, fiz um evento em nossa empresa para o time de devs e contratamos uma consultoria de tunning.
Eles disseram que o distinct cai a perfomance e deve ser utilizado apenas se nao tiver outra alternativa.
Mas faca o teste se nao ficar muito lento tudo bem.
lwinter
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 123
Data de registro: 07 Mar 2011 12:08
Cidade/Estado: Campinas - SP
Curtiu: 1 vez
Mens.Curtidas: 12 vezes

Listar clientes com/sem movimento

Mensagempor lwinter » 06 Jun 2020 21:35

Relembrando eu nao botava a mao na massa mais. Eu era apenas uma papagiao de pirata que ficava falando o que deveria ser feito e porque.
Estou tentando reaprender tudo de novo e colocar a mao na massa. Como estou com tempo, este esta sendo mey hobby.
Por isso que estou enferrujado na pratica...kkkkk......
O meu time sabia muito de Sql mas eu necas de nada...tinha conhecimento do basico...
lwinter
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 123
Data de registro: 07 Mar 2011 12:08
Cidade/Estado: Campinas - SP
Curtiu: 1 vez
Mens.Curtidas: 12 vezes

Listar clientes com/sem movimento

Mensagempor lwinter » 06 Jun 2020 21:38

Dica: Quando fizer subtracao de conjuntos. Coloque sempre o conjunto maior primeiro senao retorna errado/vazio.
Ex:
C = A - B
clientes cadastrados A é um conjunto maior que os clientes movimentados B.
C = B - A (acredito que nao ira funcionar)
lwinter
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 123
Data de registro: 07 Mar 2011 12:08
Cidade/Estado: Campinas - SP
Curtiu: 1 vez
Mens.Curtidas: 12 vezes

Listar clientes com/sem movimento

Mensagempor JoséQuintas » 06 Jun 2020 23:39

lwinter escreveu:Dica: Quando fizer subtracao de conjuntos. Coloque sempre o conjunto maior primeiro senao retorna errado/vazio.
Ex:C = A - B
clientes cadastrados A é um conjunto maior que os clientes movimentados B.
C = B - A (acredito que nao ira funcionar)


Usei a opção de DISTINCT nos dois casos.

WHERE [NOT] IDCODIGO IN ( )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 12 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro