Рассчитать количество перекрытий диапазонов дат - PullRequest
2 голосов
/ 24 октября 2019

Я стараюсь хранить часы доступности для разных сервисов. (Каждый рабочий день (8, 9 часов), 24/7 и т. Д.) Рабочий день может иметь разное рабочее время (08: 00-16: 00 или 09: 00-17: 00, 08: 00-18: 00 и т. Д. .)

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

Как лучше всего хранить это вбаза данных (PostgreSQL)?

Справочная информация

Основная цель состоит в том, чтобы рассчитать, сколько минут заданного временного диапазона находится во времени обслуживания.

A) Время обслуживания - только рабочие дни (08: 00-16: 00), а диапазон дат - [2019-10-21 15:00 ( Понедельник ) - 2019-10-22 09:00 ( вторник )]. Весь диапазон составляет 18 часов, но только 2 часа были в рабочем времени.

B) Я также хочу вычислить, знаю ли я время начала (2019-10-21 15:00) и есть 3 часа, чтобы закончить работу (в рабочее время), тогда когда будет дата окончания? (2019-10-22 10:00 - 1 час понедельник , 2 часа вторник )

1 Ответ

0 голосов
/ 24 октября 2019

Я бы сохранил данные в точности так, как вы их описали.

У вас может быть таблица для рабочих окон, т.е. с понедельника по пятницу с 08:00 до 16:00

И для каждой услугибудет иметь диапазоны дат, запуск и остановка. Я предполагаю, что сервис будет иметь несколько диапазонов дат, поэтому вам может понадобиться таблица диапазонов дат, в которой есть dateRangeId, start & stop столбцов.

Когда вы хотите что-то вычислить, вы извлекаете данныедля обслуживания и извлеките данные за рабочие дни и подсчитайте, сколько времени фактически требуется, и на любые другие вопросы, на которые вам нужно ответить:

...