что означает HAVING MAX (случай, когда условие тогда 0 или 1 конец) = 0 - PullRequest
0 голосов
/ 02 октября 2019

У меня есть таблица, содержащая 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
...