SELECT COMPLICADO PARA FAZER

LCSD 05/11/2009 09:35:36
#326978
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......
FBUR 05/11/2009 09:44:40
#326980
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?
LCSD 05/11/2009 09:47:12
#326982
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.
FBUR 05/11/2009 09:56:51
#326983
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?
LCSD 05/11/2009 09:58:39
#326984
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.
FBUR 05/11/2009 10:25:32
#326992
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
LCSD 05/11/2009 11:11:27
#326997
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
MARCELO.TREZE 05/11/2009 11:19:48
#326998
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?
LCSD 05/11/2009 11:26:21
#327000
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....
MARCELO.TREZE 05/11/2009 11:32:09
#327001
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
LCSD 05/11/2009 11:47:54
#327002
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....
Página 1 de 2 [18 registro(s)]
Tópico encerrado , respostas não são mais permitidas