我有兩個表相互關聯[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 –