Если вы просто хотите действие, используйте lead()
:
select t.*
from (select t.*,
lead(action) over (partition by userid order by time) as next_action
from t
) t
where action = 'open email';
Если вы хотите, чтобы полная строка, которая следует за строкой «открыть электронную почту», используйте lag()
:
select t.*
from (select t.*,
lag(action) over (partition by userid order by time) as prev_action
from t
) t
where prev_action = 'open email';