SELECT COMPLICADO PARA FAZER

 Tópico anterior Próximo tópico Novo tópico

SELECT COMPLICADO PARA FAZER

VB / VBA

 Compartilhe  Compartilhe  Compartilhe
#326978 - 05/11/2009 09:35:36

LCSD
SAO PAULO
Cadast. em:Janeiro/2001


Pessoal, bom dia a todos.

Vamos imaginar o seguindo desenho de Database MySQL:

Tab. Clientes:                                       Tab. Consultas
Codigo                                                  codconsulta
Fantasia                                                codcliente
DataCadastro                                        resultado
Ativo                                                     data
                                                             hora


O que eu estou precisando fazer é o seguinte:
Um relatório de clientes onde não realizarão consultas em um determinado intervalo de datas, MAS.............
     1ª regra: Tenho que atentar que dentro do intervalo selicionado, o cliente precisará estar ATIVO e estar cadastrado na tabela Clientes pelo menos até a data final cadastrada.
     2ª regra: Precisaria que este select ficasse rápido, e também trazer no resultado a data da última utilização do cliente ao sistema. Neste caso sei que terei que "Matar" em um outro recodset mesmo, até aí sem problema.....


Fico no aguardo de ajuda......

  
Quando precisar, pode contar comigo....
E quando precisar, não esqueça de agradecer, pois a educação é a ALMA DO NEGÓCIO...


Obrigado.

Luiz Cesar

#326980 - 05/11/2009 09:44:40

FBUR
TABOAO DA SERRA
Cadast. em:Maio/2009


Deixa ver se entendi: Um relatório onde os clientes não podem consultar um determinado intervalo?

Se os clientes não poderão fazer consultas nesse intervalo determinado, por que você precisa saber se o fulano está ativo e cadastrado?

"O seu sucesso está em função da sua necessidade"

#326982 - 05/11/2009 09:47:12

LCSD
SAO PAULO
Cadast. em:Janeiro/2001


Não pe isso caro FBUR.

Eu preciso é saber os clientes que não realizaram consultas num determinado período, para que seja feito um trabalho sobre esses clientes do pq não estão utilizando as consultas.

  
Quando precisar, pode contar comigo....
E quando precisar, não esqueça de agradecer, pois a educação é a ALMA DO NEGÓCIO...


Obrigado.

Luiz Cesar

#326983 - 05/11/2009 09:56:51

FBUR
TABOAO DA SERRA
Cadast. em:Maio/2009


Ha sim... :D Entendi.

Bom, parece que vc vai precisar de uma sub-consulta, aquelas com WHERE NOT EXISTS.

Esse intervalo de datas é contínuo, tipo de 01/02/2009 à  30/04/2009?
Ou é intercalado, tipo 01/02/2009 à 15/02/2009 E 10/03/2009 à 30/04/2009?

"O seu sucesso está em função da sua necessidade"

#326984 - 05/11/2009 09:58:39

LCSD
SAO PAULO
Cadast. em:Janeiro/2001


O intervalo será contínuo.
Se o usuário quiser "quebrado", ele que faça a consulta quebrada uma de cada vez. Mas a tela terá só data inicial e final.

  
Quando precisar, pode contar comigo....
E quando precisar, não esqueça de agradecer, pois a educação é a ALMA DO NEGÓCIO...


Obrigado.

Luiz Cesar

#326992 - 05/11/2009 10:25:32

FBUR
TABOAO DA SERRA
Cadast. em:Maio/2009


Última edição em 05/11/2009 10:26:08 por FBUR

Acho que ficaria + - assim:

SELECT Tab.Clientes.Codigo FROM tab.Clientes INNER JOIN Tab.Consultas ON Tab.Clientes.Codigo = Tab.Consultas.codcliente WHERE NOT EXISTS (SELECT data FROM Tab.Consultas WHERE data >  sua_data_inicial AND data < sua_data_final) AND Tab.Clientes.ativo = "ativo" AND Tab.Clientes.DataCadastro <= sua_data_final

"O seu sucesso está em função da sua necessidade"

#326997 - 05/11/2009 11:11:27

LCSD
SAO PAULO
Cadast. em:Janeiro/2001


FBUR, negativo.


Assim ele não irá me retornar nenhum registro, pois não terá registros que atendão ao JOIN das 2 tabelas, pois seo cara não usou, lógicamente não terá registro dele no NOT EXISTS

  
Quando precisar, pode contar comigo....
E quando precisar, não esqueça de agradecer, pois a educação é a ALMA DO NEGÓCIO...


Obrigado.

Luiz Cesar

#326998 - 05/11/2009 11:19:48

MARCELO-TREZE
SAO VICENTE
Cadast. em:Abril/2009


só não entendi esta parte

Citação:
...o cliente precisará estar ATIVO e estar cadastrado na tabela Clientes pelo menos até a data final cadastrada


o que seria esta data final cadastrada?

________________________________________________________________________________________
O orgulho cega até os sábios, ao ponto de não percebam que não são tão sábios como pensam.



#327000 - 05/11/2009 11:26:21

LCSD
SAO PAULO
Cadast. em:Janeiro/2001


Seria a DATA DE INCLUSÃO do cliente ao sistema.

Lógicamente, se o  cara foi inserido na tabela dia 04/11/2009, se eu tirar o relatório do dia 03/11/2009 ele não poderá aparecer, pois ele não estava cadastrado neste dia.
Mas se eu tirar o relatório dia 05/11/2009 e ele não usou nos dias 04 e dia 05 até a geração do relatório, ele deverá aparecer....

  
Quando precisar, pode contar comigo....
E quando precisar, não esqueça de agradecer, pois a educação é a ALMA DO NEGÓCIO...


Obrigado.

Luiz Cesar

#327001 - 05/11/2009 11:32:09

MARCELO-TREZE
SAO VICENTE
Cadast. em:Abril/2009


Última edição em 05/11/2009 11:34:57 por MARCELO-TREZE

e assim

"SELECT Clientes.DataCadastro,Clientes.Ativo,Consultas.* FROM Clientes INNER JOIN Consultas ON (Clientes.DataCadastro < = '" & Format(DataFim.Text,"YYYY-MM-DD) & "') AND (Clientes.ativo = 'True') AND (Consultas.Data BETWEEN '" & Format(DataIni.Text,"YYYY-MM-DD) & "' AND '" & Format(DataFim.Text,"YYYY-MM-DD) & "')"




desta forma nào daria certo

PS. Não sei como vc está salvando no campo Ativo se 0 e1 ou True e False, então altere conforme cadastra

________________________________________________________________________________________
O orgulho cega até os sábios, ao ponto de não percebam que não são tão sábios como pensam.



#327002 - 05/11/2009 11:47:54

LCSD
SAO PAULO
Cadast. em:Janeiro/2001


Marcelo, ainda não funcionou....

Vamos imaginar os seguintes DADOS nas 2 tabelas:

Tab. Cliente
Codigo     Fantasia         Data Cadastro        Situacao
1               Cliente A           2009-10-01          L
2               Cliente B           2009-10-15          L
3               Cliente C           2009-11-01          L
4               Cliente D           2009-11-05          L

Tab. Consulta
CodConsulta             CodCliente               Resultado                        Data                       Hora
1                                 2                               kjhkjhjh                      2009-10-16            10:00:00
2                                 1                               kjhkjhjh                      2009-10-16            10:02:00
3                                 4                               kjhkjhjh                      2009-11-05            10:00:00
4                                 3                               kjhkjhjh                      2009-11-01            10:00:00


Com este desenho da tabela, eu queria fazer o seguinte:
Buscar com o intervalo de data de 01/10/2009 a 15/10/2009 e trazer o cliente 1 e 2, pois neste intervalo de datas, estes clientes não efetuaram consultas neste período.
Mas não trazer o cliente 3 e 4, pois até a data de 15/10/2009 eles não estavam cadastrados na tabela de cliente.



Acho que agora está melhor explicado....

  
Quando precisar, pode contar comigo....
E quando precisar, não esqueça de agradecer, pois a educação é a ALMA DO NEGÓCIO...


Obrigado.

Luiz Cesar

 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por LCSD em 05/11/2009 16:13:06