1
我有一個包含TagName,TimeStamp和機器狀態的過程數據的表,1 =正在運行,0 =未運行。原始數據可以是這個樣子:計算兩條記錄之間的差異(時間),將最後一條記錄保留在結果中
Bss105_AUTO 2011-11-03 17:00:00.0000000 1
Bss105_AUTO 2011-11-03 22:32:49.5520000 1
Bss105_AUTO 2011-11-03 22:36:52.3200000 1
Bss105_AUTO 2011-11-04 08:15:28.6460000 0
Bss105_AUTO 2011-11-04 08:17:42.6520000 1
Bss105_AUTO 2011-11-04 11:49:42.3780000 1
我想要實現的是通過使用此查詢來計算機總運行時間:
WITH rows AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY DateTime) AS RowNumber
FROM History where TagName='Bss105_AUTO'
AND DateTime >= '2011-11-03 17:00:00.000'
AND DateTime <= '2011-11-04 17:00:00.000'
AND wwRetrievalMode = 'Delta'
AND wwVersion = 'Original'
AND OPCQuality = 192
)
SELECT mc.RowNumber, mc.DateTime, mc.TagName, mc.Value as MachineStatus, DATEDIFF(second, mc.DateTime, mp.DateTime) GrindingMachineRuntimeInSeconds
FROM rows mc
JOIN rows mp
ON mc.RowNumber = mp.RowNumber - 1
where mc.Value <> 0
我不想包括計算機器未運行的停機時間(狀態0 =未運行)。沒問題,我可以通過從結果中排除這些記錄來排除這些記錄(最後一列包含記錄之間的秒數)。
1 2011-11-03 17:00:00.0000000 Bss105_AUTO 1 19969
2 2011-11-03 22:32:49.5520000 Bss105_AUTO 1 243
3 2011-11-03 22:36:52.3200000 Bss105_AUTO 1 34716
5 2011-11-04 08:17:42.6520000 Bss105_AUTO 1 12720
我在這裏的問題是,我也需要存儲與此時間戳的最後一條記錄:2011-11-04 11:49:42.3780000
這是隻有在這一點上,機器的狀態等於1(=運行)的情況下,因爲我需要知道它是否正在運行或者不能計算從最後存儲的記錄到查詢間隔結束的運行時間!那條記錄的最後一列必須是空的!
有沒有哪位高手可以幫我一下呢?
親切的問候!
謝謝!這解決了我的問題。 :) – sekarmaeu