我有一個SQL Server數據庫中的數據集,我需要計算一臺機器的正常運行時間。我使用兩個變量來確定正常運行時間或停機時間。這兩個變量是machine_ON
和failure(s)
。 machine_ON
只是數據庫中的一個變量,failure
可以是64個不同的失敗,但全部表示爲fx_x
。SQL Server查詢buildup
這些變量的狀態信息被存儲在數據庫如下:
timestamp failurebitNr timestampOutOfAlarm
2012-01-17 10:38:58.000 f1_14 2012-01-17 10:39:05.000
含義:故障f1_14
是活躍從2012-01-17 10:38:58.000
直到2012-01-17 10:39:05.000
另外,machine_ON
狀態保存在同一個表上同樣,只有failurebitNr
具有不同的值[t2_13
]。
所以要確定正常運行時間,我需要得到timestamp
和timestampOutOfAlarm
之間的timediff,其中failurebutNr = 't2_13'
減去任何故障時間。
因此,例如,我的那些行在我的數據庫:
這應該給瞭如下圖示:
綠色是正常運行時間,紅色的停機時間。
我習慣於使用PHP,並使用while循環和文件的一些數組和其他腳本。但現在我需要在SQL Server數據庫中以查詢方式執行此操作...
那麼,如何計算正常運行時間(綠色)和停機時間(紅色)?
UPDATE
我試圖讓在幾秒鐘的時間,機器開啓。我用這個查詢:
<!-- language: lang-sql -->
DECLARE @startDate datetime
DECLARE @endDate datetime
DECLARE @projectNr int
DECLARE @MachineNr nvarchar(10)
SET @startDate = '2012-01-01 00:00:00.000'
SET @endDate = '2012-02-01 00:00:00.000'
SET @projectNr = '1234567'
SET @MachineNr = '2'
SELECT
DATEDIFF("SECOND",
CASE WHEN timestamp < @startDate
THEN @startDate
ELSE timestamp
END,
CASE WHEN timestampOutOfAlarm > @endDate OR timestampOutOfAlarm IS NULL
THEN @endDate
ELSE timestampOutOfAlarm
END) AS Uptime
FROM
[table]
WHERE
timestamp < @endDate
AND (timestampOutOfAlarm > @startDate OR timestampOutOfAlarm IS NULL)
AND fileProjectNr = @projectNr
AND fileProjectMachineNr = @MachineNr
AND (failureBitNr = 't2_13' AND failureBitValue = '1')
查詢相加得到的時間機器上。現在,如何減少失敗時間..? 因爲可以同時出現更多故障,所以無論故障發生的多少,如何確定故障時間,只能從開始到結束。 – Timo002
我想我找到了解決我的問題的方法。我需要解決這個問題,當我確定它沒問題時,我會發布它! – Timo002