SELECT MYSQL DE CLIENTES QUE NAO COMPRAM

ADHEL 06/06/2011 09:43:28
#375949
Tenho esse select aqui

[Ô]select s. Data,s. Id as Servico,c. Nome,count(se. idextintor)as Extintor ,s. Valor from servicos s,clientes c,servicos_extintores se where c. id = s. idcliente and s.id = se. id and s. data between [ô][Ô] & Format(DTPicker1.Value, [Ô]yyyy/MM/dd[Ô]) & [Ô][ô] and [ô][Ô] & Format(DTPicker2.Value, [Ô]yyyy/MM/dd[Ô]) & [Ô][ô] group by s. id order by s. data[Ô], Conexao)

Ele funciona perfeitamente
O que preciso agora é listar todos os clientes que não compram a mais de 12 meses, por isso coloquei esse select ai em cima para vocês terem um melhor entendimento
Não consigo construir esse select .
Alguém tem algum exemplo para eu ter um caminho a seguir.
Obrigado a todos


NETMANIA 06/06/2011 12:50:59
#375959
Resposta escolhida
Considerando que você queira assumir a data da máquina da pessoa, você pode usar o seguinte código:

SELECT
s.Data,
s.Id as Servico,
c. Nome,
count(se.idextintor)as Extintor
s.Valor
FROM
servicos s,
clientes c,
servicos_extintores se
WHERE
c.id = s.idcliente and
s.id = se.id and s.
s.data >= DATE_ADD(CURDATE(), INTERVAL -1 YEAR)
group by
s.id
order by
s.data

O comando DATE_ADD irá subtrair um ano em relação a data atual do servidor (que será obtido a partir da função CURDATE()).
ADHEL 06/06/2011 13:13:36
#375961
Netmania
Obrigado pela orientação
Citação:

:
Considerando que você queira assumir a data da máquina da pessoa.


Realmente não é o melhor caminho,nem tinha me atentado para isso

Então resolvi fazer diferente.
Voltei com 2 ditetimepickers e a consulta agora é :
Selecione quem não comprou nesse intervalo de datas.

Estou bem perto
Olha só

[Ô]select s. idcliente,c. nome from servicos s,clientes c where c. id = s. idcliente not in(select s. idcliente from servicos s,clientes c where c. id = s. idcliente and s.data between [ô][Ô] & Format(DTPicker1.Value, [Ô]yyyy/MM/dd[Ô]) & [Ô][ô] and [ô][Ô] & Format(DTPicker2.Value, [Ô]yyyy/MM/dd[Ô]) & [Ô][ô])[Ô], Conexao)

Aqui aparece todos os Id dos Clientes corretamente que não compraram na data selecionada entre o primeiro e o segundo DatetimePickers .Só o nome dos Clientes é que repete,ficando sempre o mesmo

Obrigado
NETMANIA 06/06/2011 14:30:36
#375974
Vamos a pergunta que não quer calar (risos):

Quais dados que você precisa voltar nesta consulta? Pelo que você fez neste exemplo ela irá repitir os dados de qualquer jeito.
ADHEL 06/06/2011 14:42:49
#375977
Preciso do ID do cliente e do nome
Na tabela clientes existe
Id
Nome

Na tabela servicos existe
Idcliente
Data

nas duas tabelas logicamente existem mais campos ,mas o que preciso é só isso ai em cima

Aparece assim no datagrid

Id Nome
1 Condominio Edificio Sao Sebastiao
2 Condominio Edificio Sao Sebastiao
3 Condominio Edificio Sao Sebastiao

Sendo que o Id 1 está certo ,realmente é o Condominio Sao Sebastiao
os outros dois nomes nao aparecem .só aparece o nosso amigo Sao Sebastiao

Obrigado
NETMANIA 06/06/2011 16:36:36
#375989
Você vai fazer isso em tela ou impresso? Se for fazer em tela você pode fazer uma algo que em um grid apareca a relação de clientes e ao clicar neste, apareça um segundo grid os dados dos serviços que este prestou para que vocês possam conversar com o cliente. Assim evita a poluição dos dados na tela e a pessoa só pega os dados necessários.
ADHEL 07/06/2011 08:47:44
#376035
Vou jogar as informações na tela.
A idéia é essa.Selecionar os Clientes que não compram a um determinado periodo.
O que se resume ao Id e ao Nome .
A partir daí ele seleciona um cliente e obtem as informações necessárias(Essa parte já está pronta)
Como te disse estou quase lá.
O id eu obtenho corretamente ,apenas o nome que sai errado.
Preciso do nome para fácil identificação do usuário.
O problema é que o nome está na tabela clientes.
Como tenho costume(Não sei ao certo se é correto ou incorreto.Nessa incógnita se possível você me esclarecer tambem seria ótimo)não gravo o nome do cliente nas tabelas que esse venha a aparecer ,gravo apenas o Id)
Se pela tua experiência você me disser que não consigo.Nesse caso gravo o nome na respectiva tabela.
Obrigado mais uma vez
NETMANIA 07/06/2011 09:40:18
#376043
Se você possui uma tabela de clientes, os dados do mesmo devem ser gravadas nela e quando precisar associar os dados nas demais tabelas, estas deverá receber somente o código (técnica de normalização dos dados).

Para pegar os clientes que não tiveram compras, você pode fazer o seguinte (selects seguem em anexo).

O segundo select eu não construi pois não seis quais dados você vai precisar, mas se quiser ajuda, mande a idéia do que deseja carregar e a estrutura das tabelas para construir uma consulta modelo.

[]'s

Netmania (Otacílio)
Tópico encerrado , respostas não são mais permitidas