我有这样的数据库记录:
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
是我将外部设备连接到PC时,0
是我断开它的时候。
我想知道连接usb设备的秒数以及断开连接的秒数。
我的问题:
我可以使用MSSQL查询吗?
答案 0 :(得分:1)
我调整了这些值,使结果比样本数据中的数千秒更有意义(并且可验证)。我使用自加入递归cte来执行DATEDIFF
计算,如下所示:
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
小于当前行并且状态在1
和0
之间切换而加入自身。
;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 |
<强>参考:强>