У меня есть таблица, содержащая id, start_time, end_time, например:
id start_time end_time
1 10:00 12:00
1 10:15 12:30
1 12:15 12:45
1 13:00 14:00
2 10:15 10:30
Я пытаюсь объединить последовательные или идентичные периоды времени, то есть объединить несколько запросов записей в один непрерывный период временизапись для каждого ID. Результат предположим так:
id start_time end_time
1 10:00 12:30
1 13:00 14:00
2 10:15 10:30
Есть запрос, который работает. Но я не понимаю смысла иметь max (случай, когда ... end) = 0. Почему это условие может фильтровать вывод? И почему нам нужно внутреннее присоединение к таблице 3 раза, а не дважды?
select t4.id, t4.start_time as start, min(t4.end_time) as end
from (select t1.id, t1. start_time, t2.end_time
from t t1, t t2, t t3
where t1. end_time <= t2. end_time
and t1.id = t2.id
group by t1.id, t1. start_time, t2. end_time
having max(case when
(t1. start_time >t3. start_time and t1. start_time <=t3. end_time and t1.id=t3.id) or
(t2. end_time >=t3. start_time and t2. end_time <t3. end_time and t2.id=t3.id)
then 1 else 0 end)=0) t4
group by t4.id, t4. start_time