SELECT COMPLICADO PARA FAZER
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......
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......
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?
Se os clientes não poderão fazer consultas nesse intervalo determinado, por que você precisa saber se o fulano está ativo e cadastrado?
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.
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.
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?
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 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.
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.
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
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
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
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
só não entendi esta parte
o que seria esta data final cadastrada?
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?
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....
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....
e assim
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
[Ô]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
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....
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....
Tópico encerrado , respostas não são mais permitidas