Filtrar clientes que nao fazem orcamentos em 6 meses
Pessoal, Bom dia
Preciso fazer uma query de uma unica tabela de orcamentos onde pego todos os clientes que nao orçam a 6 meses atras. Esses clientes nao devem ter orçamentos a frente desse periodo. Alguem tem noção de como fazer isso. Porque nao estou conseguindo. Utilizando SQL SERVER
Obrigado pela ajuda.
Preciso fazer uma query de uma unica tabela de orcamentos onde pego todos os clientes que nao orçam a 6 meses atras. Esses clientes nao devem ter orçamentos a frente desse periodo. Alguem tem noção de como fazer isso. Porque nao estou conseguindo. Utilizando SQL SERVER
Obrigado pela ajuda.
Enock Junior
Curtidas 0
Melhor post
Emerson Nascimento
07/10/2019
deve ser algo assim:
SELECT CLI.CLIENTE, CLI.NOME FROM CLIENTES CLI LEFT JOIN ORCAMENTOS ORC ON ORC.CLIENTE = CLI.CLIENTE GROUP BY CLI.CLIENTE, CLI.NOME HAVING MAX(COALESCE(ORC.DATA,0)) < (GETDATE() - 180)
GOSTEI 1
Mais Respostas
Enock Junior
07/10/2019
deve ser algo assim:
Emerson. o resultado esta ok, porem se eu filtro o codigo desse cliente ele nao deveria aparecer a frente dos 180 dias e o mesmo aparece. Esse esta sendo minha maior duvida. E quando vou no sistema e filtro por esse codigo, ele esta me trazendo ate a data de hoje e nao só ate os clientes que orçaram em -180 dias. Mas obrigado pela ajuda
SELECT CLI.CLIENTE, CLI.NOME FROM CLIENTES CLI LEFT JOIN ORCAMENTOS ORC ON ORC.CLIENTE = CLI.CLIENTE GROUP BY CLI.CLIENTE, CLI.NOME HAVING MAX(COALESCE(ORC.DATA,0)) < (GETDATE() - 180)
GOSTEI 0
Emerson Nascimento
07/10/2019
apresente as instruções que você utilizou
GOSTEI 1
Enock Junior
07/10/2019
deve ser algo assim:
SELECT CLI.CLIENTE, CLI.NOME FROM CLIENTES CLI LEFT JOIN ORCAMENTOS ORC ON ORC.CLIENTE = CLI.CLIENTE GROUP BY CLI.CLIENTE, CLI.NOME HAVING MAX(COALESCE(ORC.DATA,0)) < (GETDATE() - 180)
SELECT DISTINCT
clientes.CodCliente, clientes.RazaoSocial, orc.NumOrcamento,ORC.EMail,ORC.Telefone, orc.DtEmissao
FROM
crm_clientes
left JOIN
ORC ON ORC.CodCliente = Clientes.CodCliente
GROUP BY clientes.CodCliente, clientes.RazaoSocial , orc.NumOrcamento, orc.DtEmissao, ORC.EMail, ORC.Telefone
HAVING MAX(COALESCE(orC.dtemissao,0)) < (GETDATE() -180)
order by orc.DtEmissao
resultado
59637 2019-04-10 00:00:00.000
59637 2019-04-10 00:00:00.000
60315 2019-04-10 00:00:00.000
61131 2019-04-10 00:00:00.000
Aqui ele me traz ok . O resultado esta ok, porem, quando eu filtro ele no sistema nao deveria vir orçamentos acima dessa data e aparece orçamentos de hoje. Minha intenção é saber quem nao fez orçamentos do mes 4 para frente
GOSTEI 0
Emerson Nascimento
07/10/2019
- não se trabalha com DISTINCT e GROUP BY na mesma instrução
- se você quer a última data, o campo que contém essa data não pode estar no GROUP BY e deve ser tratado por uma função de agregação
o correto seria algo assim:
- se você quer a última data, o campo que contém essa data não pode estar no GROUP BY e deve ser tratado por uma função de agregação
o correto seria algo assim:
SELECT c.CodCliente, c.RazaoSocial, orc.NumOrcamento, orc.EMail, orc.Telefone, max(orc.DtEmissao) UltEmissao FROM crm_clientes c LEFT JOIN ORC ON orc.CodCliente = c.CodCliente GROUP BY c.CodCliente, c.RazaoSocial, orc.NumOrcamento, orc.EMail, orc.Telefone HAVING MAX(COALESCE(orc.DtEmissao,0)) < (GETDATE() -180)
GOSTEI 0
Emerson Nascimento
07/10/2019
na verdade deveria ser como abaixo:
SELECT c.CodCliente, c.RazaoSocial, max(orc.NumOrcamento) NumOrcamento, max(orc.DtEmissao) UltEmissao FROM crm_clientes c LEFT JOIN ORC ON orc.CodCliente = c.CodCliente GROUP BY c.CodCliente, c.RazaoSocial HAVING MAX(COALESCE(orc.DtEmissao,0)) < (GETDATE() -180)
GOSTEI 1
Enock Junior
07/10/2019
na verdade deveria ser como abaixo:
Obrigado.
SELECT c.CodCliente, c.RazaoSocial, max(orc.NumOrcamento) NumOrcamento, max(orc.DtEmissao) UltEmissao FROM crm_clientes c LEFT JOIN ORC ON orc.CodCliente = c.CodCliente GROUP BY c.CodCliente, c.RazaoSocial HAVING MAX(COALESCE(orc.DtEmissao,0)) < (GETDATE() -180)
GOSTEI 0