日期:2014-05-17  浏览次数:20493 次

处理时间段SQL
请大家帮我想想下面的这个怎么处理
原始表
设备名称   开机时间                        关机时间
设备1     2013-11-01 9:00:00       2013-11-02 15:00:00
设备2     2013-11-02 18:00:00      2013-11-04 10:00:00

期望得到的结果是
设备名称   日                        历时
设备1     2013-11-01            15
设备1     2013-11-02            15   
设备2     2013-11-02            6
设备2     2013-11-03            24
设备2     2013-11-04            10

历时的单位是小时,也就是要统计出每个设备每一天的所有运行时间累加起来
时间段 按天累计历时

------解决方案--------------------

create table dot
(设备名称 varchar(10),开机时间 datetime,关机时间 datetime)

insert into dot
 select '设备1','2013-11-01 9:00:00','2013-11-02 15:00:00' union all
 select '设备2','2013-11-02 18:00:00','2013-11-04 10:00:00'


with t as
(select a.设备名称,a.开机时间,a.关机时间,
        convert(varchar,dateadd(d,b.number,convert(varchar,a.开机时间,23)),23) '日'
 from (select 设备名称,开机时间,关机时间,datediff(d,开机时间,关机时间) 'dd'
       from dot) a
 cross apply (select number from master.dbo.spt_values
              where type='P' and number<=a.dd) b
)
select 设备名称,日,
       case when datediff(d,开机时间,日)=0 then 24-datepart(hh,开机时间)
            when datediff(d,关机时间,日)=0 then datepart(hh,关机时间)
            else 24 end '历时'
from t

/*
设备名称       日                              历时