2015-02-06 43 views
-1

我有一個表如下:檢查日期3個月內重疊

Cola REF  RecordNumber StartDate    EndDate    
NAME1 REF001 RECORD011  12/11/2012    11/01/2013  
NAME1 REF001 RECORD012  24/01/2013    10/04/2013 
NAME1 REF001 RECORD013  26/04/2013    9/07/2013  
NAME1 REF001 RECORD014  12/06/2013    2/07/2013 
NAME1 REF001 RECORD015  11/07/2013    17/07/2013  
NAME1 REF001 RECORD016  2/09/2013    23/09/2013 
NAME1 REF001 RECORD017  26/04/2013    6/09/2013  

我需要返回,其中任何行:

  • 可樂是一樣的
  • 裁判同樣
  • 開始日期或結束日期在任何其他 記錄編號的3個月內 - 所以任何重疊也包括在內

到目前爲止,我有這個,我相信各種出前2:

SELECT DISTINCT Cola 
       , Ref 
       , RecordNumber 
       , StartDate 
       , EndDate 
FROM datatable a 
WHERE EXISTS 
    (
    SELECT TOP 1 1 
    FROM datatable b 
    WHERE b.cola = a.cola 
      AND b.ref = a.ref 
      AND b.id <> a.id) 

我掙扎的日期檢查部雖然,任何人都可以點我在正確的方向?

我想我應該

Cola REF  RecordNumber StartDate    EndDate    
NAME1 REF001 RECORD011  12/11/2012    11/01/2013   
NAME1 REF001 RECORD014  12/06/2013    2/07/2013  
NAME1 REF001 RECORD017  26/04/2013    6/09/2013  

回答

2

您需要的日期算法添加到子查詢結束。這裏是一個例子:

SELECT dt.* 
FROM datatable dt 
WHERE EXISTS (SELECT 1 
       FROM datatable dt2 
       WHERE dt2.cola = dt.cola AND 
        dt2.ref = dt.ref AND 
        dt2.id <> dt.id AND 
        (dt.startdate between dateadd(month, -3, dt2.startdate) and 
              dateadd(month, 3, dt2.enddate) or 
        dt.enddate between dateadd(month, -3, dt2.startdate) and 
             dateadd(month, 3, dt2.enddate) 
        ) 
      ); 
+0

這是帶回所有行仍然? – user3219693 2015-02-06 02:22:45