PostgreSQL: как прокрутить соединение между двумя датами с обеих сторон? - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть данные смены и разрыва, которые я хотел бы объединить. Вот как это выглядит:

enter image description here

Вы можете видеть, что у меня есть один набор смен и один набор разрывов. Я хочу объединить две таблицы на работнике, где время начала и окончания перерыва находится между начальной и конечной сменой. Таким образом, конечный результат будет выглядеть так: enter image description here

Вы можете видеть, что в этом внутреннем соединении один из разрывов, который не соответствует условию, исключается из результата. Прошу прощения, что это скорее картинки, чем код, так как в данный момент у меня нет возможности тиражирования.

Мне известно об обычном:

SELECT 
*
FROM
shifts inner JOIN breaks ON
BREAKS.worker = shifts.worker AND
breaks.break_start between shifts.shift_start AND shifts.end_shift;

Но я не уверен, как связать столбец break_end с этим уравнением. Спасибо.

1 Ответ

0 голосов
/ 08 ноября 2018

Типы данных диапазона и их & ldquo; содержит & rdquo; Оператор должен решить эту проблему довольно красиво:

tstzrange(shifts.shift_start, shifts.end_shift)
   @> tstzrange(breaks.break_start, breaks.break_end)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...