Encontrar não coincidentes por período, deve ser isso...
26/12/2012
0
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
Posts
26/12/2012
Robson Alves
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!
26/12/2012
Robson Alves
DATEDIFF(month, TBL_DONATIVOS.[DATA], getdate()) >= 6
26/12/2012
Alex Lekao
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
26/12/2012
Paulo Freire
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.
26/12/2012
Alex Lekao
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
26/12/2012
Paulo Freire
-- ====================================================
-- 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.
26/12/2012
Alex Lekao
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'
26/12/2012
Alex Lekao
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
26/12/2012
Alex Lekao
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
27/12/2012
Alex Lekao
Blz... se der certo, posta o que fez para solucionar para conhecimento nosso...
abraco.
Alex - Lekao
28/12/2012
Paulo Freire
28/12/2012
Alex Lekao
Fico feliz em ter podido ajudar.
um prospero 2013 para vc e sua família... fica na paz!!!
Abraco.
Alex - Lekao
28/12/2012
Paulo Freire
Clique aqui para fazer login e interagir na Comunidade :)