Array
(
)

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

Paulo Freire
|
MVP
    26 dez 2012

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.

Robson Robsonalves.net
   - 26 dez 2012

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:

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

Pq ai os mensalistas ficam foram!

0
|
0

Robson Robsonalves.net
   - 26 dez 2012

#Código

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

0
|
0

Alex Lekao
   - 26 dez 2012

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

0
|
0

Paulo Freire
|
MVP
    26 dez 2012

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.

0
|
0

Alex Lekao
   - 26 dez 2012

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

0
|
0

Paulo Freire
|
MVP
    26 dez 2012

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.

0
|
0

Alex Lekao
   - 26 dez 2012

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'

0
|
0

Alex Lekao
   - 26 dez 2012

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

0
|
0

Alex Lekao
   - 26 dez 2012

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

0
|
0

Paulo Freire
|
MVP
    27 dez 2012

Olá Alex vou tentar e retorno, obrigado.

0
|
0

Alex Lekao
   - 27 dez 2012

Bom dia!!!

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

abraco.

Alex - Lekao

0
|
0

Paulo Freire
|
MVP
    28 dez 2012

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

0
|
0

Alex Lekao
   - 28 dez 2012

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

0
|
0

Paulo Freire
|
MVP
    28 dez 2012

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

0
|
0

Alex Lekao
   - 28 dez 2012

AMEM!!!

0
|
0

José
   - 30 jul 2013

Obrigado pela participação de todos, já que a duvida foi solucionada estou dando o tópico por concluído.

0
|
0