Encontrar não coincidentes por período, deve ser isso...

26/12/2012

0

Olá a todos e obrigado por qualquer ajuda.

Viou explicar meu cenário, tenho duas tabelas

TBL_MEMBROS(ID, NOME, ENDERECO, DATA_NASC)

TBL_DONATIVOS(ID, ID_MEMBRO, DATA, FORMA, VALOR)

Gostaria de fazer um select das pessoas não deram donativos a mais de 6 meses, por exemplo teve um membros que deu um donativo a 4 meses atrás,esse não apareceria no select, porem todos que a mais de 6 meses não deram donativos apareceriam no select.

Eu tentei com DATEDIFF(day, TBL_DONATIVOS.[DATA], getdate()) < 180, mas não deu certo, porque trouxe os membros que trazem donativos mensais, gostaria de somente membros que fazem mais de 6 meses que não trazem donativos, deu pra explicar direito ??? obrigado. Preciso de uma luz pra isso.
Paulo Freire

Paulo Freire

Responder

Posts

26/12/2012

Robson Alves

DATEDIFF(day, TBL_DONATIVOS.[DATA], getdate()) < 180

Sua idéia é legal, mas não pegue os dias, pegue os meses, como foi definido só quem não doou por 6 meses ou mais então:

[url] DATEDIFF(month, TBL_DONATIVOS.[DATA], getdate()) >= 6[/url]

Pq ai os mensalistas ficam foram!
Responder

26/12/2012

Robson Alves

 DATEDIFF(month, TBL_DONATIVOS.[DATA], getdate()) >= 6
Responder

26/12/2012

Alex Lekao

Ola bom dia!!!

Desculpe mas acredito que o seu select so estaria errado o sinal que esta de meno(<) e se estivesse com o sinal de maior(>) acredito que já resolveria.

acredito que possa ser isso, não analisei bem nem fiz testes, mas espero que ajude.

Abraco.

Alex - Lekao
Responder

26/12/2012

Paulo Freire

Então, nesse caso ele mes traz até as pessoas assíduas em donativos, exemplo:

O membro Robson

teve donativos no de Jan, Fev, Mar, Abr, Mai, Jun, Jul, Set, Out e Dez na tabela TBL_DONATIVOS

e o membro Alex

teve somente Jan, Fev e Mar

Gostaria que meu select mostrasse somente o Alex e não o Robson, eu vi que SQLServer não tem Last(registro) para fazer algum tipo de comparação, pois gostaria de saber quais membros parou de fazer contribuições a mais de 6 meses.
Responder

26/12/2012

Alex Lekao

Ola Tudo bem?

Entao, o que estou achando estranho eh justamente isso, vc quer aqueles que estão num período maior de 6 meses correto?

no caso do que vc colocou usando dias, 180 dias no caso, no que vc colocou esta usando < (menor) ao passo que acredito que deveria ter usado > (maior) que chegaria, acredito eu, que no mesmo resultado que o exemplo que o Robson, sugerio usando o datediff baseado no mês, no caso usando > (maio) que 6 no caso.

a pergunta que vou fazer vai parecer meio boba, mas vc esta usando o datediff no where correto?

Abraco.

Alex - Lekao
Responder

26/12/2012

Paulo Freire

Sim Alex, veja minha Store Procedure

-- ====================================================
-- Author: Paulo Freire
-- Create date: 23/10/2012
-- Description: Store Procedure Membros sem donativos 6 Meses
-- ====================================================
CREATE PROCEDURE [dbo].MembrosSemDonativos (

@IDIGREJA SMALLINT
)
AS

SELECT DISTINCT
TBL_MEMBROS.ID,
TBL_MEMBROS.NOME,
TBL_MEMBROS.STATUS,
TBL_MEMBROS.ID_IGREJA

FROM TBL_MEMBROS

INNER JOIN TBL_DONATIVOS ON TBL_MEMBROS.ID = TBL_DONATIVOS.ID_MEMBRO

WHERE

DATEDIFF(month, TBL_DONATIVOS.[DATA], getdate()) > 6


AND

(@IDIGREJA = 0 OR TBL_MEMBROS.ID_IGREJA = @IDIGREJA)

ORDER BY TBL_MEMBROS.ID



Eu não queria que aparecessem os membros que tem donativos de 1 mês, 2 meses até 6 meses pois eles estão de uma certa formas contribuindo, gostariam de pegar os membros que não contribuem a mais de 6 meses.
Responder

26/12/2012

Alex Lekao

Oi Estou colocando aqui, dois modelos que fiz baseado na minha tabela de clientes, no meu caso não estou usando nenhuma outra tabela apenas a data de venda que foi gravado na tabela de clientes para fazer, e esta dando certo nas duas opções, tanto usando Day quanto usando Month.

Não sei se vai ajudar.

select
codcli,
nome,
dthcad,
dthvda,GETDATE() as hoje,
DATEDIFF(DAY,dthvda,GETDATE()) as 'Dias Sem Compra',
DATEDIFF(MONTH,dthvda,GETDATE()) as 'Meses Sem Compra' from clientes
where DATEDIFF(DAY,dthvda,getdate()) > 180
order by 'Dias Sem Compra'

select
codcli,
nome,
dthcad,
dthvda,GETDATE() as hoje,
DATEDIFF(DAY,dthvda,GETDATE()) as 'Dias Sem Compra',
DATEDIFF(MONTH,dthvda,GETDATE()) as 'Meses Sem Compra' from clientes
where DATEDIFF(MONTH,dthvda,getdate()) > 6
order by 'Meses Sem Compra'
Responder

26/12/2012

Alex Lekao

Caraca Paulo, não sei bem como se usa procedures, sou novato em sql... rsrsr

mas acredito que no que se refira ao select da procedures seja como um select comum a única diferença deve estar nas variáveis que deve-se ter que usar.

normalmente eu quando uso joins não uso inner join, so left join, não sei se faria diferença.

sera que por causa do distinct que esta usando não esta afetando as datas, pq no caso tem dia mês ano e horas?

Abraco.

Alex - Lekao
Responder

26/12/2012

Alex Lekao

Oi Paulo...

experimente algo do tipo deste select que vou colocar abaixo, eu utilizo ele para identificar produtos que não vendem em um período, acredito que seja similar o conceito para os donativos.

SELECT
S.CODLOC1 AS LOCACAO,
S.CODSTK AS CODIGO,
S.CODFAB AS NUMFAB,
S.MARCA AS FABRICA,
S.ESTOQUE AS ESTOQUE,
S.DTHCAD AS CADASTRO
FROM STK AS S
WHERE (1=1)
AND NOT EXISTS(SELECT I.CODSTK FROM IRV AS I
LEFT JOIN RQV AS R ON (R.SID = I.SID)
WHERE R.TIPOREQ = 'VD'
AND R.CODCPV <> '80'
AND R.DATEMI >= [DADO1]
AND R.DATEMI <= GETDATE()
AND I.CODSTK = S.CODSTK
GROUP BY I.CODSTK)
GROUP BY S.CODLOC1,S.CODSTK,S.CODFAB,S.MARCA,S.ESTOQUE,S.DTHCAD
ORDER BY S.CODSTK
Responder

27/12/2012

Paulo Freire

Olá Alex vou tentar e retorno, obrigado.
Responder

27/12/2012

Alex Lekao

Bom dia!!!

Blz... se der certo, posta o que fez para solucionar para conhecimento nosso...

abraco.

Alex - Lekao
Responder

28/12/2012

Paulo Freire

Olá Alex deu certo, usei seu conceito sobre o join e tirar o distinct, ai deu certo, obrigadão cara. Valeu
Responder

28/12/2012

Alex Lekao

Ola Paul, bom dia!!

Fico feliz em ter podido ajudar.

um prospero 2013 para vc e sua família... fica na paz!!!

Abraco.

Alex - Lekao
Responder

28/12/2012

Paulo Freire

Obrigado Alex, pra ti também e toda sua família, que Deus abençoe vcs imensamente.
Responder

28/12/2012

Alex Lekao

AMEM!!!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar