Как выбрать значения, которые произошли сразу после определенного действия в SQL? - PullRequest
1 голос
/ 29 февраля 2020

У меня есть SQL набор данных, подобный этому:

UserID  Action       Time
111     open email   03/02/2019 12:00
111     open pageD   03/02/2019 12:12
222     sign in      02/04/2019 13:25
222     open email   02/04/2019 14:00
222     open pageA   02/04/2019 14:20
...

Как показать список с идентификатором каждого человека и действиями, которые они предприняли сразу после открытия своего электронного письма? Я хочу получить такой результат:

UserID  PageOpenTime       Action
111     03/02/2019 12:12   open pageD
222     02/04/2019 14:20   open pageA
...

Кто-нибудь знает, как это сделать?

1 Ответ

1 голос
/ 29 февраля 2020

Если вы просто хотите действие, используйте 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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...