2013-10-05 206 views
-1

表1:數據提取

PHONE_NUMBER | DATE 
--------------------------  
    10005  | 5/10/2013 
    15555  | 7/17/2013 
    58746  | 9/20/2013 

表2:

PHONE_NUMBER | DATE 
--------------------------  
    10005 | 5/12/2013 
    10005 | 5/16/2013 
    15555 | 6/17/2013 
    15555 | 7/19/2013 
    58746 | 8/22/2013 
    58746 | 12/26/2013 
    58746 | 9/20/2013 

從上述兩個表,我要通過映射表對1 PHONENUMBER提取從表2的數據表2的電話號碼和表2中的日期可以完全相同,也可以是表1中相應電話號碼日期的+/- 5天。

表2將有重複PHONENUMBERS和所有重複匹配上述條件應該提取。

回答

3

如果我明白你的問題本應滿足的要求:

SELECT 
     t2.phone_number 
     , convert(varchar(10),t2.[date],121) as t2_date 
     , convert(varchar(10),t1.[date],121) as t1_date 
     , datediff(DAY,t1.[date], t2.[date]) as diff_dates 
FROM table2 AS t2 
INNER JOIN table1 AS t1 ON t2.phone_number = t1.phone_number 
         AND t2.[date] between dateadd(day,-5,t1.[date]) and dateadd(day,5,t1.[date]) 

見:this sqlfiddle

結果從樣本數據:

| PHONE_NUMBER | T2_DATE | T1_DATE | DIFF_DATES | 
|--------------|------------|------------|------------| 
|  10005 | 2013-05-12 | 2013-05-10 |   2 | 
|  15555 | 2013-07-19 | 2013-07-17 |   2 | 
|  58746 | 2013-09-20 | 2013-09-20 |   0 | 
2

/*假設你約會的Fileds是有效日期數據類型*/

SELECT a.* FROM TABLE1 a INNER JOIN TABLE2 b 
ON a.phone=b.phone AND (a.[date]=b.[date] OR b.[date] BETWEEN DATEADD(day,-5,b.[date]) AND DATEADD(day,5,b.[date]))