Попробовал это двумя способами, и он заработал.
Сначала я объединил 2 таблицы с отдельными записями для каждого типа, «ведущий» и «последователь», и создал оператор case для расчета максимального времени начала для каждой комбинации времени начала интереса и ведомого и минимального времени окончания для каждой комбинации времени окончания интереса и ведомого. Сохраняет это во временной таблице.
CASE
WHEN lead_table.start_time > follower_table.start_time THEN lead_table.start_time
WHEN lead_table.start_time < follower_table.start_time THEN patient_table.start_time_local
ELSE 0
END as overlap_start_time,
CASE
WHEN follower_table.end_time < lead_table.end_time THEN follower_table.end_time
WHEN follower_table.end_time > lead_table.end_time THEN lead_table.end_time
ELSE 0
END as overlap_end_time
Затем создал внешний запрос для поиска в только что созданной временной таблице, чтобы найти разницу между временем начала и временем окончания для каждой комбинации интереса и последователя в секундах
select temp_table.id,
temp_table.overlap_start_time,
temp_table.overlap_end_time,
DATEDIFF_BIG(second,
temp_table.overlap_start_time,
temp_table.overlap_end_time) as overlap_time FROM temp_table