计算行对之间的时间差
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
并在 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)
| CONNECTEDTIME |
|---------------|
| 55 |
参考:
Recursive Queries Using Common Table Expressions (CTE)
我有这样的数据库记录:
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
并在 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)
| CONNECTEDTIME |
|---------------|
| 55 |
参考: