2013-10-05 1 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 

Из приведенных выше двух таблиц, я хочу, чтобы извлечь данные из таблицы 2, отображение таблицы 1 PHONENUMBER против таблица 2, а дата в Таблице 2 может быть в ту же дату или +/- 5 дней соответствующей даты номерной таблицы в таблице 1.

В таблице 2 будут дублированы номера телефонов, и все дубликаты, соответствующие вышеуказанному условию, должны извлекаться.

ответ

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