У меня есть таблица с данными процесса, содержащими 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 (= работает), потому что мне нужно знать, работает ли она или нет, чтобы иметь возможность рассчитать время выполнения от последней сохраненной записи до конца интервал запроса !! Последний столбец для этой записи должен быть пустым!
Есть ли здесь гуру, которые могут мне помочь?
С уважением!