单个结果集中的记录的datediff



我有一个场景,需要比较单个结果集中的日期。例如,如果我有一个表,其中有5行具有不同的日期。

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

在上表中,我需要根据日期差异返回true或false。所以,如果两个日期中的任何一个日期相差30,那么它将返回true。

我想在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

但上述查询并没有按预期工作。我需要一些建议。

提前感谢

您必须使用一个(相关的)子查询:

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

假设您拥有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 
-- 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

最新更新