SQL基于时间戳和状态的总时间

时间:2016-09-23 22:32:16

标签: sql sql-server

我有一张这样的表:

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吗?我应该采取的任何想法/方向?

1 个答案:

答案 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())