2013-06-04 2 views
0

J'ai un 2 tables, une avec des informations générées par l'activité, l'autre avec de nouvelles informations sur le contrat. En fin de compte ce que j'essaie de faire est de voir si dans les 30 jours après la date d'activité, un nouveau contrat a été généré. Ainsi, par exemple:SQL Joindre en utilisant flottant Où Date

Activties

Contracts

La première table est la table d'activités, le 2ème tableau du contrat. Comme vous le verrez par exemple, le compte ABC123 a un nouveau contrat dans les 30 jours suivant la date d'activité - CT-7135. Cependant, CT-7695, bien qu'il existe dans le tableau et est associé au compte ABC123, ne satisferait pas à l'exigence «Nouveau contrat» b/c il a commencé en dehors de la fenêtre 30 depuis la date d'activité.

Le compte GJ1234 serait cependant un "non" b/c il n'y a pas de contrat dans la table qui est dans les 30 jours de la date d'activité. De même, CGE435 (à cause de CT-4389) et GHE568 (à cause des contrats CT-4389, CT-8080 et/ou CT-6690 ---- MAIS PAS à cause du CT-6829) sont tous deux admissibles.

Je suppose que mon problème est d'essayer de faire cette jointure dynamique de la date d'activité b/c c'est différent pour chaque élément de campagne.

Pensées?

Merci.

Répondre

0

Essayez ceci:

Select Distinct AccountId 
From Accounts a 
Where Exists 
    (Select * From contracts 
    Where AccountId = a.AccountId 
     And ContractDate >= a.ActivityDate 
     And DateDiff(day, a.ActivityDate, ContractDate) <= 30) 
0

Le tableau suivant trouvera tous les comptes qui ont eu un nouveau contrat dans les 30 jours de l'activité:

SELECT * FROM activities AS A WHERE AccountID IN (SELECT DISTINCT(AccountID) from contracts WHERE ContractStartDate >= A.ActivityDate AND ContractStartDate <= DATE_ADD(A.ActivityDate, INTERVAL DAY 30))