2015-02-19 5 views
0

У меня есть один сценарий, где мне нужно сравнить даты в одном наборе результатов. Например, если у меня есть таблица с 5 строками с разными датами.dateiff для записей в одном наборе результатов

Table1 
ID DATE 
1 2014/01/01 
2 2014/02/01 
3 2014/03/01 
4 2014/04/01 
5 2014/05/02 

В приведенной выше таблице, мне нужно вернуть истинным или ложным в зависимости от даты difference.So, если какой-либо из двух дат, имеющих разницу дат 30, то она возвращает истину.

Я хочу сделать это в SQL.

Я попытался с

SELECT 
     case when count(*)>0 then 1 else 0 end 
    FROM 
     Table AS T1 CROSS JOIN Table AS T2  
    WHERE 
     DATEDIFF(DD,T1.VISIT_DATE,T2.VISIT_DATE)<=30 

Но выше запрос не работает, как ожидалось. Мне нужно какое-то предложение по этому поводу.

Заранее спасибо

+1

Пожалуйста, добавьте ожидаемый результат. – TechDo

+0

, какую версию sqlserver вы используете? –

+0

Я использую SQL Server 2008. Спасибо. – mns

ответ

0

Вы должны использовать (коррелировать) подзапрос:

SELECT LessThan30days = CAST(CASE WHEN EXISTS 
         (
          SELECT 1 FROM Table AS T2 
          WHERE DATEDIFF(DD,T1.VISIT_DATE,T2.VISIT_DATE) <= 30) 
         THEN 1 ELSE 0 END AS BIT) 
FROM Table AS T1 
0

Если у вас есть SQL Server 2012 или более поздней версии, я думаю, что это то, что вы ищете:

DECLARE @example TABLE (ID int, DT datetime) 
INSERT INTO @example(ID, DT) 
SELECT 1,'2014/01/01' 
UNION SELECT 2,'2014/02/01' 
UNION SELECT 3,'2014/03/01' 
UNION SELECT 4,'2014/04/01' 
UNION SELECT 5,'2014/05/02' 

;with rowsWithDayDifference as (
    SELECT ID, DT, DATEDIFF(day,LAG(DT) OVER (ORDER BY DT),DT) as DayDifference 
    FROM @example 
) 
select *, CASE WHEN DayDifference<=30 THEN 1 ELSE 0 END Is30DaysOrLess 
from rowsWithDayDifference 
+0

Вы правы. Извиняюсь! Я исправил свой ответ – Elliveny

0
-- sample data start 

declare @t table (id int, d datetime) 
insert into @t values (1, '2014/01/01') 
insert into @t values (2, '2014/02/01') 
insert into @t values (3, '2014/03/01') 
insert into @t values (4, '2014/04/01') 
insert into @t values (5, '2014/05/02') 

-- sample data end 

select t1.*, t2.d as d2, datediff(day, t2.d, t1.d) 
    from @t t1 left outer join @t t2 on (t1.id-1) = t2.id 
Смежные вопросы