Вы можете использовать самосоединение для сопоставления перекрытий и предложение having
для фильтрации тех, которые содержат все ссылки.
Чтобы получить общее количество цепей, вы можете выполнить еще одно самостоятельное объединение, чтобы найти все схемы, которые когда-либо появлялись в таблице, для каждого местоположения:
select a.location,
num_circuits,
a.downtime,
min(b.uptime) uptime,
timediff(min(b.uptime), a.downtime) duration,
count(distinct b.circuit_id) num_circuits_down
from tbl a
inner join tbl b
on a.location = b.location
and a.downtime between b.downtime and b.uptime
inner join (
select location, count(distinct circuit_id) num_circuits
from tbl
group by location
) c
on a.location = c.location
group by a.location, num_circuits, a.downtime
having count(distinct b.circuit_id) = num_circuits;
Было бы лучше иметь отдельную справочную таблицу, в которой перечислены цепи для каждого местоположения (4 записи на местоположение в вашем случае).
Тогда вышеуказанный запрос будет выбран из этой справочной таблицы, вместо:
select location, count(distinct circuit_id) num_circuits
from tbl
group by location
... вы бы сделали:
select location, count(distinct circuit_id) num_circuits
from reftable
group by location
Это сделает вышеупомянутый запрос более эффективным и надежным.