首页 > 解决方案 > 如何选择在 SQL 中某个操作之后立即发生的值?

问题描述

我有一个这样的 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
...

如何显示每个人的 ID 列表,以及他们在打开电子邮件后立即采取的操作?我想得到这样的结果:

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

有谁知道这是怎么做到的吗?

标签: sqldatetime

解决方案


如果您只想要该操作,请使用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';

推荐阅读