J'ai deux tables liées les unes aux autres [t1] & [t2] avec deux colonnes: [id] & [date]. J'espère récupérer le [id] et [date] de [t1] où aucun [t2]. [Date] tombe sur ou un an avant le MIN ([t1]. [Date]). Fondamentalement, excluent les [id] ayant un [t2]. [Date] (toute occurrence de date - dynamique) 'ou un an avant le premier [t1]. [Date]'. Tout [t2]. [Id] s avant un an à partir de MIN ([t1]. [Date]) est correct, et tout [t2]. [Id] s après MIN ([t1]. [Date]) est bon comme bien. Si une valeur [t2]. [Date] tombe dans la plage d'un an, cet [id] doit être exclu des données renvoyées.DATE PLAGE NON ENTRE deux dates d'une autre table
Conceptuellement Je veux quelque chose comme:
SELECT [id]
FROM [t1]
WHERE [t2].[date] NOT BETWEEN DATEADD(YEAR, -1, [t1].[date]) AND [t1].[date]
Mais je suis aux prises avec la façon d'aborder ce; utilisez une variable JOIN/UNION, DECLARE, une clause WHERE. Toute aide serait appréciée! Je vous remercie!
/* Adding this new information below: */
J'aime la réponse de Scott; Cependant, je ne pense pas avoir rendu mon «code conceptuel» suffisamment cohérent à l'origine. Je pense que je cherche quelque chose de plus comme ça, mais je retourne une erreur (Un agrégat peut ne pas apparaître dans la clause WHERE à moins qu'il ne soit dans une sous-requête contenue dans une clause HAVING ou une liste de sélection une référence externe.):
SELECT [id]
FROM [t1]
WHERE NOT EXISTS
(SELECT * FROM [t2] WHERE [t2].[date]
BETWEEN DATEADD(YEAR, -1, MIN([t1].[date])) AND MIN([t1].[date]))
/* Adding this new information below: */
Je crois que j'ai trouvé la solution à l'enquête originale. S'il vous plaît donner un 'Arrow Up' si vous l'aimez!
SELECT DISTINCT [t1].[id]
FROM [t1]
WHERE NOT EXISTS (SELECT 1
FROM [t2]
WHERE [t2].[id] = [t1].[id]
AND [t2].[date] BETWEEN DATEADD(dd, -365, [t1].[date])
AND [t1].[date])
je vais laisser ce ici ... http: //sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do -between-and-the-devil-have-in-common.aspx –