У меня есть такая таблица:
Person smallint(5) act_time datetime
1 2020-05-29 07:00:00
1 2020-05-29 07:15:00
1 2020-05-29 07:30:00
2 2020-05-29 07:15:00
2 2020-05-29 07:30:00
1 2020-05-29 10:30:00
1 2020-05-29 10:45:00
Приведенная выше таблица является примером с 2 разными людьми, и есть строка для каждого квартала, в котором они работают ...
Как лучше всего в MySQL «преобразовать» эту таблицу в другую таблицу, где есть столбец для «человек», столбец для «начало» и один для «стоп».
Итак, результат это похоже на:
Person Start Stop
1 2020-05-29 07:00:00 2020-05-29 07:45:00
2 2020-05-29 07:15:00 2020-05-29 07:45:00
1 2020-05-29 10:30:00 2020-05-29 11:00:00
Я пробовал с левым соединением с той же исходной таблицей, но это не сработало ...
Спасибо.
Спасибо за ваш Ответить. Теперь я попробовал это с таблицей выше - и это, к сожалению, не дает такого результата ... Моя sql строка:
select person,min(act_time) start_date,max(act_time) end_date from (select t.*,row_number() over(order by act_time) rn1,row_number() over(partition by person order by act_time) rn2 from test t) t group by person, rn1 - rn2 order by min(act_time)
But the result it generates is:
1 29-05-2020 07:00:00 29-05-2020 07:15:00
2 29-05-2020 07:15:00 29-05-2020 07:15:00
1 29-05-2020 07:30:00 29-05-2020 07:30:00
2 29-05-2020 07:30:00 29-05-2020 07:30:00
1 29-05-2020 10:30:00 29-05-2020 10:45:00
Это должно быть похоже на результат с 3 строками. Поэтому, когда между рядами с одним и тем же человеком есть промежуток более 15 минут, следует создать новый ряд.