sql - 用于创建会话 ID 的 SQL 查询
问题描述
DeviceID TimeStamp EventType
1 2020-01-01 01:00:00.000 Arrival Event
1 2020-01-01 01:00:02.000 Departure Event
1 2020-01-01 02:00:02.000 Arrival Event
1 2020-01-01 02:00:05.000 Departure Event
1 2020-01-01 03:00:05.000 Arrival Event
1 2020-01-01 03:00:05.000 ActivityI
1 2020-01-01 03:00:05.000 ActivityI
1 2020-01-01 03:00:19.000 Departure Event
1 2020-01-01 04:00:19.000 Arrival Event
1 2020-01-01 04:00:20.000 Departure Event
1 2020-01-01 05:00:20.000 Arrival Event
1 2020-01-01 05:00:20.000 ActivityI
1 2020-01-01 05:00:20.000 ActivityI
1 2020-01-01 05:00:30.000 Departure Event
1 2020-01-01 06:00:30.000 Arrival Event
1 2020-01-01 06:00:33.000 Departure Event
我有上面的数据。每个事件都以到达开始,以离开结束。我想为每次到达创建 sessionid/transactionid。我如何在 sql 中做到这一点?
预期产出
DeviceID TimeStamp EventType SessionID
1 2020-01-01 01:00:00.000 Arrival Event 1
1 2020-01-01 01:00:02.000 Departure Event 1
1 2020-01-01 02:00:02.000 Arrival Event 2
1 2020-01-01 02:00:05.000 Departure Event 2
1 2020-01-01 03:00:05.000 Arrival Event 3
1 2020-01-01 03:00:05.000 ActivityI 3
1 2020-01-01 03:00:05.000 ActivityI 3
1 2020-01-01 03:00:19.000 Departure Event 3
1 2020-01-01 04:00:19.000 Arrival Event 4
1 2020-01-01 04:00:20.000 Departure Event 4
提前致谢。
解决方案
您可以做一个窗口总和,每次到达时递增 1:
select
t.*,
sum(case when eventType = 'Arrival Event' then 1 else 0 end)
over(partition by deviceID order by timestamp) sessionID
from mytable t
推荐阅读
- mysql - STR_TO_DATE 与时区
- javascript - 脚本标记源默认为 URL over path
- html - 自举列间隙
- parceljs - parcel.js 中的命令 --open 'google chrome' 不适用于 Windows,仅适用于 MacOS
- amazon-web-services - AWS IoT Core 和移动 SDK - 缓存容量和缓存控制?
- jquery - 在可变持续时间内缩小 div 的宽度
- r - 在每个 facet_wrap 中包含所有数据的绘图
- hl7-fhir - URL 中 FHIR 资源名称的大小写
- ubuntu-16.04 - E: 包 'oracle-java8-installer' 没有安装候选
- laravel - 找不到 Orchestra 测试台