рассчитать общее время простоя на основе времени смены - PullRequest
0 голосов
/ 06 февраля 2019

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

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

В базе данных 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 к его значению по умолчанию

...