У меня есть таблица mysql с именем employee_jobs
, которая выглядит примерно так:
id (uuid) | job_id (uuid) | employee_id (uuid) | date (date)
----------|---------------|--------------------|------------
id-1 | job-id-1 | emp-id-1 | 2019-04-01
id-2 | job-id-1 | emp-id-1 | 2019-04-03
id-3 | job-id-2 | emp-id-1 | 2019-04-04
id-4 | job-id-1 | emp-id-1 | 2019-04-05
id-5 | job-id-3 | emp-id-2 | 2019-04-01
Я настроил запрос для получения данных и упорядочил сначала по employee_id
, затем по date
(как показано выше).Я хочу получить список рабочих периодов по сотрудникам, поэтому в приведенном выше примере я получу что-то вроде:
employee_id (uuid) | job_id (uuid) | start_date(date) | end_date (date)
-------------------|---------------|------------------|----------------
emp-id-1 | job-id-1 | 2019-04-01 | 2019-04-03
emp-id-1 | job-id-2 | 2019-04-04 | 2019-04-04
emp-id-1 | job-id-1 | 2019-04-05 | 2019-04-05
emp-id-2 | job-id-3 | 2019-04-01 | 2019-04-01
Несколько замечаний - 1: есть две записидля emp-id-1
и job-id-1
, поскольку сотрудник 1 находился на этой работе в течение двух отдельных периодов (с днем между job-id-2
).Во-вторых, в календарных днях на работе могут быть пробелы (например, в выходные или праздничные дни), но это не должно разбивать даты начала и окончания (для emp-id-1
на job-id-1
в течение первого периода работы не былона 2019-04-02
, но период задания по-прежнему изменяется с 2019-04-01
на 2019-04-03
.
Может ли mysql выполнить запрос, который выполняет такую группировку, путем последовательных (упорядоченных) записей, имеющих одинаковые job_id и employee_id (которыйЯ мог бы затем агрегировать с максимальными / минимальными датами)? Или это нужно будет делать вне запроса к базе данных?