如何预先检查数据并水平显示?

时间:2016-09-26 08:55:34

标签: sql sql-server sql-server-2008

以下是我的数据样本集:

ID    DATETIME    
1     29-12-2016 03:00
2     28-12-2016 14:00
3     28-12-2016 16:00
4     25-12-2016 00:00

预期结果:

ID    DATETIME             24HoursDataExisted
1     29-12-2016 03:00     0
2     28-12-2016 14:00     1
3     28-12-2016 16:00     1
4     25-12-2016 00:00     0

如何编写此类查询,以确定每条记录在未来24小时内是否存在其他记录?它与DATEADD(hh, 24,datetime)有关,但我不确定如何将其写入SQL。
根据上面的样本数据,由于ID1和ID3的记录,ID2记录为真,因为ID1记录,ID3为真。

1 个答案:

答案 0 :(得分:0)

如果您使用的是2012,则可以使用导联功能..

select id,datetimee,
case  
when datediff(hour,convert(datetime,datetimee,105),cast(lead(convert(datetime,datetimee,105)) 
over (order by convert(datetime,datetimee,105)) as datetime))<=24 
then 1 else 0 end
from #temp
order by id desc

2008年,您可以使用以下

;with cte
as
(
select id,convert(datetime,datetimee,105) as dtval,
row_number() over (order by id desc) as rownum
from #temp
)
select c1.id,c1.dtval,
case when datediff(hour,c1.dtval,c2.dtval)<=25 then 1 else 0 end as comecol
 from cte c1
left join cte c2
on c1.rownum+1=c2.rownum

输出:

id  datetimee          somecol
4   25-12-2016 00:00    0
3   28-12-2016 16:00    1
2   28-12-2016 14:00    1
1   29-12-2016 15:00    0