У меня есть база данных PostgreSQL, содержащая три столбца: один для персонального номера работника, один для времени начала / окончания, один для типа соответствующего действия (начало или остановка).
Как я могу узнать, какое время не используется в течение дня?
personal_number | callback_time | callback_type
-----------------+---------------+---------------
18000130 | 11:05:31 | Start
18000130 | 12:58:07 | Break
18000130 | 12:58:14 | Start
18000130 | 13:33:46 | Break
18000130 | 13:33:52 | Start
18000130 | 14:00:16 | Break
18000168 | 13:59:35 | Start
18000168 | 14:29:41 | Break
18000168 | 14:29:53 | Start
18000168 | 15:31:52 | Break
18000168 | 15:32:04 | Start
18000168 | 17:26:05 | Break
18000168 | 17:26:14 | Start
18000168 | 18:52:15 | Break
18000168 | 21:05:39 | Start
18000168 | 21:47:12 | Break
18000241 | 05:58:15 | Start
18000241 | 05:58:57 | Break
18000241 | 06:00:13 | Start
18000241 | 09:15:10 | Break
18000241 | 09:37:17 | Start
18000241 | 10:35:15 | Break
18000241 | 10:35:25 | Start
18000241 | 11:05:39 | Break
18000241 | 11:05:47 | Start
18000241 | 12:58:22 | Break
18000241 | 12:58:30 | Start
18000241 | 13:35:08 | Break
18000241 | 13:35:15 | Start
18000241 | 14:00:23 | Break
18002441 | 02:55:20 | Start
18002441 | 03:12:44 | Break
18002441 | 03:12:56 | Start
18002441 | 04:07:41 | Break
18002441 | 22:30:47 | Start
Я могу рассчитать время, которое используется для каждого работника (как сумма различий между началом и перерывом). Однако эти работники могут работать параллельно, поэтому простая формула 24 часа - рабочее время работать не будет. Если я не могу рассчитать перекрывающиеся рабочие часы, что я тоже не могу выполнить sh.
Я также могу рассчитать время, которое не используется ДО первого запуска и ПОСЛЕ последнего перерыва.
Понятия не имею, как рассчитать время, которое не используется в оставшуюся часть дня, т. Е. Как суммировать интервалы бездействия.
Я пытаюсь сделать это в Python, но я открыт для любых идей.