如何使用存储在 SQL 数据库中的数字状态来查找设备可用性
How to use digital status stored in SQL database to find out device availability
我有一些数字标记已登录到 InTouch Historian。我想找出该信号保持开启状态的时间(累积)。例如
DateTime Status
-------------------------------------
22/11/2016 15:33:00 1
22/11/2016 15:33:40 0
22/11/2016 15:34:25 1
22/11/2016 15:34:56 1
22/11/2016 15:35:30 1
22/11/2016 15:35:57 0
22/11/2016 15:36:42 0
22/11/2016 15:37:18 1
etc
所以问题是如何计算信号高的总持续时间(1)
预期输出:
22/11/2016 15:33:40 - 22/11/2016 15:33:00 = 40s
22/11/2016 15:35:57 - 22/11/2016 15:34:25 = 92s
所以输出应该是132s或者2:12
;WITH StatusOn (LoggedDate)
AS(
SELECT
th.LoggedDate
from
[dbo].[InTouchHistory] th
left join
[dbo].[InTouchHistory] th2
ON th2.LoggedDate = (SELECT MAX(LoggedDate) FROM [dbo].[InTouchHistory]
WHERE [LoggedDate] < th.LoggedDate)
WHERE
ISNULL(th2.Status, 0) = 0
and th.Status = 1
)
SELECT
SUM(DATEDIFF(second, th1.LoggedDate, th2.LoggedDate))
FROM StatusOn th1
INNER JOIN
[dbo].[InTouchHistory] th2
ON th2.LoggedDate = (SELECT MIN(LoggedDate) FROM [dbo].[InTouchHistory]
WHERE [LoggedDate] > th1.LoggedDate AND Status = 0)
我有一些数字标记已登录到 InTouch Historian。我想找出该信号保持开启状态的时间(累积)。例如
DateTime Status
-------------------------------------
22/11/2016 15:33:00 1
22/11/2016 15:33:40 0
22/11/2016 15:34:25 1
22/11/2016 15:34:56 1
22/11/2016 15:35:30 1
22/11/2016 15:35:57 0
22/11/2016 15:36:42 0
22/11/2016 15:37:18 1
etc
所以问题是如何计算信号高的总持续时间(1)
预期输出:
22/11/2016 15:33:40 - 22/11/2016 15:33:00 = 40s
22/11/2016 15:35:57 - 22/11/2016 15:34:25 = 92s
所以输出应该是132s或者2:12
;WITH StatusOn (LoggedDate)
AS(
SELECT
th.LoggedDate
from
[dbo].[InTouchHistory] th
left join
[dbo].[InTouchHistory] th2
ON th2.LoggedDate = (SELECT MAX(LoggedDate) FROM [dbo].[InTouchHistory]
WHERE [LoggedDate] < th.LoggedDate)
WHERE
ISNULL(th2.Status, 0) = 0
and th.Status = 1
)
SELECT
SUM(DATEDIFF(second, th1.LoggedDate, th2.LoggedDate))
FROM StatusOn th1
INNER JOIN
[dbo].[InTouchHistory] th2
ON th2.LoggedDate = (SELECT MIN(LoggedDate) FROM [dbo].[InTouchHistory]
WHERE [LoggedDate] > th1.LoggedDate AND Status = 0)