Listar clientes com/sem movimento
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Listar clientes com/sem movimento
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?
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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Listar clientes com/sem movimento
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.
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.
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.
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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Listar clientes com/sem movimento
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!
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!
Listar clientes com/sem movimento
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.
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.
Listar clientes com/sem movimento
Esta logica de C = A - B, vale tambem para qualquer situacao.
Exemplo:
Produtos sem movimentacao.
Clientes sem atendimento no helpdesk
etc...
Exemplo:
Produtos sem movimentacao.
Clientes sem atendimento no helpdesk
etc...
Listar clientes com/sem movimento
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.
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.
Listar clientes com/sem movimento
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...
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...
Listar clientes com/sem movimento
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)
Ex:
C = A - B
clientes cadastrados A é um conjunto maior que os clientes movimentados B.
C = B - A (acredito que nao ira funcionar)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Listar clientes com/sem movimento
Usei a opção de DISTINCT nos dois casos.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)
WHERE [NOT] IDCODIGO IN ( )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
