2013-10-05 205 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]))