我正在记录设备在表格中的连接和断开时间。
最终目的是定义最大断开时间。
我的表格看起来像这样
在继续进行最大DATEDIFF计算之前,我尝试在每个断开连接行之间尝试DATEDIFF(见下图):
查询显然是错误的,因为它在所有“已断开连接”和“已连接”行之间产生了差异。
我错过了什么?
谢谢
答案 0 :(得分:1)
试试这个,注意负值表示连接仍处于活动状态
;WITH cte_Connectivity(DeviseID, EventTime, EventType) AS
(
SELECT 1,'2017-3-24 00:01:00.000', 'On' UNION ALL
SELECT 1,'2017-3-24 00:02:00.000', 'Off' UNION ALL
SELECT 2,'2017-3-24 00:01:00.000', 'On' UNION ALL
SELECT 2,'2017-3-24 00:04:00.000', 'Off' UNION ALL
SELECT 3,'2017-3-24 00:01:00.000', 'On' UNION ALL
SELECT 4,'2017-3-24 00:01:00.000', 'On' UNION ALL
SELECT 4,'2017-3-24 00:06:00.000', 'Off' UNION ALL
SELECT 5,'2017-3-24 00:01:00.000', 'On' UNION ALL
SELECT 5,'2017-3-24 00:10:00.000', 'Off'
)
SELECT a.DeviseID,
a.EventTime,
DATEDIFF(MINUTE, a.EventTime, ISNULL(b.EventTime, DATEADD(minute, - 1, a.EventTime))) AS TimeConnected
FROM cte_Connectivity a
LEFT JOIN cte_Connectivity b
ON CASE
WHEN a.EventType = 'On'
THEN 1
ELSE NULL
END = CASE
WHEN b.EventType = 'Off'
THEN 1
ELSE NULL
END
AND a.DeviseID = b.DeviseID
WHERE a.EventType = 'ON'
答案 1 :(得分:0)
然后我轻松解决了这个问题:
......没什么特别的,再次感谢大家!