计算行对之间的时间差

Calculating Time Difference Between pairs of rows

我有这样的数据库记录:

Connected                 UpdatedTime
1                         2015-02-05 13:13:23.420
0                         2015-02-05 23:40:50.360
1                         2015-02-05 23:40:50.357
0                         2015-02-05 23:34:41.250

1 是当我将外部设备连接到电脑时,0 是当我断开连接时。 我想知道usb设备连接了多少秒,断开了多少秒。

我的问题:

我可以使用 MSSQL 查询来做到这一点吗?

我调整了这些值,使结果比样本数据中的数千秒更有意义(和可验证)。我使用自连接递归 cte 来执行 DATEDIFF 计算,如下所示:

SQL Fiddle

MS SQL Server 2008 架构设置:

CREATE TABLE USBConnections
    ([Connected] int, [UpdatedTime] datetime)
;

INSERT INTO USBConnections
    ([Connected], [UpdatedTime])
VALUES
    (1, '2015-02-05 13:00:00'),
    (0, '2015-02-05 13:00:50'),
    (1, '2015-02-05 14:00:50'),
    (0, '2015-02-05 14:00:55')
;

查询 1:

请注意,递归 cte 根据行号小于当前行 -1 并在 10 之间切换的状态连接到自身。

;WITH cte AS
(
SELECT [Connected], [UpdatedTime], 
       ROW_NUMBER() OVER ( ORDER BY [UpdatedTime]) rownum
FROM USBConnections
)
SELECT SUM(DATEDIFF(SECOND, cte1.[UpdatedTime], cte2.[UpdatedTime]) ) ConnectedTime
FROM    cte cte1
INNER JOIN cte cte2 ON cte1.rownum = cte2.rownum - 1 
      AND (cte1.Connected = 1 AND cte2.Connected = 0)

Results:

| CONNECTEDTIME |
|---------------|
|            55 |

参考:

Recursive Queries Using Common Table Expressions (CTE)