日期范围不在另一张桌子的两个日期之间

时间:2017-05-12 14:27:33

标签: sql sql-server between

我有两个彼此相关的表格[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])

1 个答案:

答案 0 :(得分:1)

日期< StartDate或日期>结束日期