Первый пост. Пожалуйста, будьте добры.
Иметь таблицу БД с «ID», «State» и «TimeStamp».
Число «Состояние» представляет текущее состояние машины на моем заводе. 100 = остановлено, 130 = работает, 170 = неисправен и т. д. и т. д.
Каждый раз, когда меняется номер состояния, вставляется новая запись.
Это хорошо работает и дает мне запись с номером штата и соответствующей отметкой времени.
Длительность времени, в течение которого аппарат находился в определенном состоянии, можно определить путем вычитания метки времени для данной записи из метки времени для следующей записи (при изменении состояния).
До сих пор я использовал функцию LEAD, чтобы получить метку времени следующей строки и поместить ее рядом с предыдущей строкой. Визуально это «выглядит» как начало: если бы я вычел два столбца меток времени, я мог бы получить разницу во времени. Если бы у меня была разница, я мог бы СУММАТЬ для каждого экземпляра каждого отдельного номера штата.
SELECT
[tbl_tg_machinestate_ndx],
[Machine_State],
[t_stamp],
LEAD([t_stamp]) OVER (ORDER BY [tbl_tg_machinestate_ndx]) NextStateTime
FROM [db_SPE_Carrig].[dbo].[tbl_TG_MachineState]
WHERE [t_stamp] BETWEEN '2019-04-17 13:00' AND '2019-04-17 14:00'
В конечном итоге мне нужен отчет с круговой диаграммой. Каждая часть пирога будет представлять совокупное количество времени, в течение которого машина находилась в каждом заданном состоянии. например в состоянии 130 в течение 5 часов 43 минуты, в состоянии 170 в течение 56 минут и т. д. и т. д.