sql - 如何选择在 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
...
有谁知道这是怎么做到的吗?
解决方案
如果您只想要该操作,请使用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';
推荐阅读
- bluetooth - 有没有办法在 Android Instant App 中进行蓝牙扫描?
- json - Flutter 从互联网上获取数据
- linux - 如果您在 pthread_mutex_wait 上阻塞的进程上发出信号(os 信号,而不是 pthread_mutex_unlock)会发生什么
- freebsd - FreeBSD - 我如何编译 PolyML,包括 XWindows 模块
- javascript - useEffect 旧数据
- xamarin.forms - Azure Dev Ops - 构建 Xamarin 项目失败
- javascript - 重新排列数组数组中的值
- c - 如何访问结构的元素
- java - android中频繁更改视图的最佳方法?
- r - dplyr 过滤条件来区分 unicode 符号及其 unicode 表示