To jest problem luk i wysp. Potrzebujesz początku każdej wyspy, którą możesz zidentyfikować, porównując stan w bieżącym wierszu ze stanem w „poprzednim” rekordzie.
Przydają się do tego funkcje okien:
select t.*
from (
select t.*, lag(status) over(partition by personID order by unixtime) lag_status
from mytable t
) t
where lag_status is null or status <> lag_status