Я не очень понял "Есть вариант добавить столбцы в таблицу (например нумерацию периодов для каждого субъекта), но пока не вижу в этом решения."
Без этой фразы делать можно так:
select p.*
from periods p
join (
select subject_id, group_id, min(start) min_start, max(start) max_start, max(case when "your date" between start and finish then start end) mid_start
from periods
group by subject_id, group_id
having mid_start is not null /*если хотите чтобы данные выводились только те у которых "your date" попал в период */
) temp_T on ( p.subject_id = temp_T.subject_id
and p.group_id = temp_T.group_id
and p.start in (min_start, coalesce(mid_start,min_start), max_start))
если не хотите Having можно в on внести mid_start is not null
Не очень понял про интервалы, но если они не пересекаются то решение подойдет, если пересекаются ... надо переписать ;-)
UPD. Перечитал вопрос, если Вам надо NOW() < finish можете поменять условие в "your date" between start and finish. Но тогда не понятно про максимальный интервал, у Вас они на будущее написаны?
UPD2. Если MySQL 8, можно обойтись оконными функциями ;-) написть проще