我有两个表相互关联[t1] & [t2]有两列:[id] & [日期]。我希望从[t1](其中没有[t2]。[日期]或MIN([t1]。[日期])之前一年)检索[id]和[日期]。日期范围不在两个日期从另一个表
基本上排除[t2]。[日期](任何日期发生 - 动态)'或最早[t1]。[日期]之前一年的[id] s。在MIN([t1]。[日期])一年之前的任何[t2]。[id] s都可以,并且MIN([t1]。[日期])之后的任何[t2]。[id]好。如果任何[t2]。[日期]值落在一年范围内,则应将[id]从返回的数据中排除。
概念我想是这样的:
SELECT [id]
FROM [t1]
WHERE [t2].[date] NOT BETWEEN DATEADD(YEAR, -1, [t1].[date]) AND [t1].[date]
但我与如何处理这个挣扎;使用JOIN/UNION,DECLARE变量,WHERE子句。任何帮助,将不胜感激!谢谢!
/* Adding this new information below: */
我喜欢斯科特的回应;然而,我认为我原来并不认为我的“概念代码”足够一致。我想我正在寻找更像这样的东西,但我返回一个错误(聚合可能不会出现在WHERE子句中,除非它位于包含在HAVING子句或选择列表中的子查询中,并且聚合的列是一个外部参考。):
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: */
我相信我已经找到了原始查询的解决方案。如果你喜欢它,请给出'向上箭头'!
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])
我只想离开这个位置... HTTP://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do -between-and-the-devil-have-in-common.aspx –