यह एक अंतराल और द्वीपों की समस्या है। आप इसे विंडो फ़ंक्शंस (केवल MySQL 8.0 में उपलब्ध) के साथ हल कर सकते हैं:
select
person,
min(act_date) start_date,
max(act_date) end_date
from (
select
t.*,
sum(act_date <> lag_act_date + interval 15 minute)
over(partition by person order by act_date) grp
from (
select
t.*,
lag(act_date)
over(partition by person order by act_date) lag_act_date
from mytable t
) t
) t
group by person, grp
order by min(act_date)
एक संचयी राशि का उपयोग करके आसन्न रिकॉर्ड के समूह बनाने का विचार है:हर बार एक अंतराल होता है जो 15 मिनट नहीं होता है, योग वृद्धि।