我有一张这样的表:
Timestamp | State
01-jan-2016 00:01:00 | ON
01-jan-2016 00:02:00 | OFF
01-jan-2016 00:02:01 | ON
01-jan-2016 00:03:00 | OFF
如果NOW
是2016年1月1日00:03:10
,则会看到示例结果。
State | TotalTime
ON | 00:01:59
OFF | 00:00:11
我希望有一个查询返回每个州的总时间[小时,分钟和秒]。这可能使用SQL Server Express 2012吗?我应该采取的任何想法/方向?
答案 0 :(得分:1)
如果您想要查看超过24小时
,则需要进行小的更改Declare @YourTable table (Timestamp datetime,State varchar(25))
Insert Into @YourTable values
('01-jan-2016 00:01:00','ON'),
('01-jan-2016 00:02:00','OFF'),
('01-jan-2016 00:02:01','ON'),
('01-jan-2016 00:03:00','OFF')
Declare @Default DateTime ='01-Jan-2016 00:03:10'
;with cteBase as (
Select *,NextTime = Lead(TimeStamp,1,@Default) over (Order By TimeStamp)
From @YourTable
)
Select State
,Duration=cast(DateAdd(SECOND,sum(DateDiff(SECOND,TimeStamp,NextTime)),cast('1900-01-01 00:00:00' as datetime)) as time)
From cteBase
Group By State
返回
State Duration
OFF 00:00:11
ON 00:01:59
快点说明。
如果您希望最终状态为最新状态,则 Lead(TimeStamp,1,TimeStamp)
可以是Lead(TimeStamp,1,GetDate())
。