我有两个彼此相关的表格[t1]& [t2]有两列:[id] &安培; [日期]。我希望从[t1]中检索[id]和[date],其中没有[t2]。[date]或MIN之前一年([t1]。[date])。
基本上排除在最早[t1]。[date]之前或之前一年有[t2]。[date](任何日期发生 - 动态)'的[id]。从MIN([t1]。[date])开始一年之前的任何[t2]。[id] s都可以,并且MIN([t1]。[date]之后的任何[t2]。[id] s都是好的好。如果任何[t2]。[date]值落在一年范围内,则应从返回的数据中排除[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])
答案 0 :(得分:1)
日期< StartDate或日期>结束日期