Рассчитать общее время простоя на основе времени смены

Я пытаюсь написать запрос, чтобы дать мне общее количество минут простоя за смену. У меня есть таблица календаря, в которой указаны время начала и окончания каждой смены на весь год.

Самые большие трудности, с которыми я сталкиваюсь, это как рассчитать количество минут простоя в смену, когда время простоя распределяется по нескольким сменам. Другая проблема заключается в том, как рассчитать время простоя, когда оно все еще продолжается (нет остановки записи для последней записи запуска).

В базе данных Postgres время простоя записывается путем перечисления идентификатора компьютера, который его создал, отметки времени создания и какого события (время начала или время остановки).

pue_produnit_id     pue_tcreation       pue_eventkind
17          2018-12-13 04:45:07     StartDownTime
17          2018-12-14 10:36:35     StopDownTime
18          2018-12-14 10:40:11     StartDownTime
18          2019-01-04 10:46:34     StopDownTime

В календарной таблице смены это записывается путем указания идентификатора типа смены (1, 2, 3), начала смены и конца смены.

cae_entrytype_id    cae_from        cae_to
1           2019-01-01 06:30:00     2019-01-01 14:30:00
2           2019-01-01 14:30:00     2019-01-01 22:30:00
3           2019-01-01 22:30:00     2019-01-02 06:30:00

Я был в состоянии написать запрос, чтобы показать мне это, используя привести, чтобы найти время простоя остановки и используя между, чтобы сравнить метку времени простоя с календарем смены:

Date        Shift_number        Machine         ActivityDate        startdttime         stopdttime              Duration_Minutes
2019-02-05      1               17          2019-02-05      2019-02-05 14:19:39         2019-02-05 14:23:46         4

То, что у меня есть, не обязательно то, что мне нужно. Номер смены берется из того, когда наступило время запуска, и не делит его, когда время останова находится в другой смене. Мне бы хотелось, чтобы из таблицы календаря смен для одной записи было видно, сколько минут было простоев. Это нужно будет сделать для каждой машины. Например:

Machine     Shift       Date        downtime_minutes
17          1       1/2/2019        26
18          1       1/2/2019        32
17          2       1/2/2019        0
18          2       1/2/2019        100

Если вычислить время простоя, которое все еще происходит (без последней записи времени останова), то это нормально на данный момент. Также, в зависимости от результатов, я смогу решить это с помощью ведущей функции и добавив current_timestamp к его значению по умолчанию.

0 ответов

Другие вопросы по тегам