繁体   English   中英

日期范围不在另一个表格的两个日期之间

[英]DATE RANGE NOT BETWEEN two dates from another table

我有两个彼此相关的表[t1]和[t2],两列:[id]和[date]。 我希望从[t1]中没有[t2]。[date]属于MIN([t1]。[date])或一年之前的[t1]中检索[id]和[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: */

我喜欢斯科特的回应; 但是,我认为我本来的“概念代码”不够统一。 我想我正在寻找类似的东西,但是我返回一个错误(除非聚集在HAVING子句或选择列表中包含的子查询中,否则聚集可能不会出现在WHERE子句中,并且聚集的列是外部参考。):

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: */

我相信我已经找到了原始查询的解决方案。 如果您喜欢,请给它一个“ Arrow Up”!

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])

这是不存在的工作!

SELECT [id]
FROM [t1]
WHERE NOT EXISTS (SELECT * FROM [t2] 
                  WHERE [t2].[date] BETWEEN DATEADD(YEAR, -1, [t1].[date]) AND [t1].[date])

更新以与Min(T1.Date)比较:

我对Sqlserver不太熟悉-oracle具有Analytic函数,这些函数使此操作更为简单。 您可以仅使用子查询来完成此操作,如下所示:

SELECT [id]
FROM (SELECT [id], min([date] AS minDate from [t1] GROUP BY [id]) AS t1_min
WHERE NOT EXISTS (SELECT * FROM [t2] 
                  WHERE [t2].[date] BETWEEN DATEADD(YEAR, -1, [t1_min].[minDate]) AND [t1_min].[minDate])

日期<开始日期或日期>结束日期

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM