df-drills pandas · Polars · DuckDB SQL · DuckDB Relational 题目列表 登录

会话切分

困难 19-timeseries 时间序列 sessionizelagcumsumgaps-and-islands

把每个用户的事件流切分成会话。

  • 每个用户的事件按 ts 升序排列。相邻两个事件的时间间隔超过 30 分钟时,后一个事件开始一个新会话;间隔恰好 30 分钟仍属于同一个会话。
  • 时间完全相同的事件属于同一个会话。
  • 每个用户的会话按时间先后编号,session_no 从 1 开始。
  • 对每个会话输出:开始时间 start(会话内最早的 ts)、结束时间 end(最晚的 ts)、事件数 n_events。

输入

  • events(event_id, user_id, ts, event_type, page):输入不保证有序

输出

列为 user_id, session_no, start, end, n_events,行顺序不限。

输入表 (case base,共 2 个 case:base、edge)

events web/events
#event_idint64user_idint64tsdatetimeevent_typestringpagestring
1 1 53 2026-06-03 17:57:33 login /home
2 2 53 2026-06-04 15:21:00 visit /home
3 3 53 2026-06-04 15:22:00 view /product/303
4 4 53 2026-06-04 15:32:04 add_to_cart /cart
5 5 56 2026-06-05 23:24:19 login /home
6 6 56 2026-06-05 23:29:18 view /product/202
7 7 56 2026-06-05 23:36:15 view /product/202
8 8 56 2026-06-05 23:47:36 add_to_cart /cart
9 9 56 2026-06-05 23:56:24 checkout /checkout
10 10 56 2026-06-06 19:14:00 visit /home
11 11 56 2026-06-06 19:22:53 view /product/303
12 12 56 2026-06-06 19:25:12 view /home
13 13 56 2026-06-06 19:28:25 add_to_cart /cart
14 14 29 2026-06-07 10:40:01 login /home
15 15 29 2026-06-07 10:46:43 view /product/303
16 16 29 2026-06-07 11:04:46 add_to_cart /cart
17 17 29 2026-06-07 11:09:25 checkout /checkout
18 18 34 2026-06-07 12:57:49 login /home
19 19 34 2026-06-07 13:03:57 view /product/202
20 20 34 2026-06-07 13:11:07 view /home
显示前 20 行,共 1500 行

期望输出 (case base,行顺序不限)

#user_idInt64session_noDecimal(precision=38, scale=0)startDatetime(time_unit='us', time_zone=None)endDatetime(time_unit='us', time_zone=None)n_eventsInt64
1 53 2.0 2026-06-04 15:21:00 2026-06-04 15:32:04 3
2 4 1.0 2026-09-04 08:12:49 2026-09-04 08:35:27 5
3 4 3.0 2026-09-13 05:05:48 2026-09-13 05:35:11 6
4 4 4.0 2026-09-13 06:14:48 2026-09-13 06:33:11 5
5 4 6.0 2026-09-19 06:25:41 2026-09-19 06:54:22 5
6 4 7.0 2026-09-26 03:30:56 2026-09-26 03:36:17 2
7 4 8.0 2026-10-07 13:24:04 2026-10-07 13:24:04 1
8 23 2.0 2026-07-16 12:27:00 2026-07-16 12:38:59 2
9 23 5.0 2026-07-28 11:31:55 2026-07-28 11:40:35 2
10 23 9.0 2026-09-13 19:34:58 2026-09-13 19:42:23 2
11 23 10.0 2026-09-13 20:43:04 2026-09-13 20:51:39 2
12 23 11.0 2026-10-14 14:20:06 2026-10-14 14:20:06 1
13 24 2.0 2026-09-10 04:18:04 2026-09-10 04:30:44 4
14 33 1.0 2026-09-05 13:07:12 2026-09-05 13:17:04 3
15 33 3.0 2026-10-14 08:32:38 2026-10-14 08:34:26 2
16 33 4.0 2026-10-14 10:40:38 2026-10-14 10:55:13 3
17 40 2.0 2026-08-20 09:12:00 2026-08-20 09:28:09 2
18 40 5.0 2026-08-29 18:49:27 2026-08-29 19:06:21 3
19 43 1.0 2026-06-24 11:18:24 2026-06-24 11:27:09 2
20 43 3.0 2026-09-25 09:18:31 2026-09-25 09:30:29 4
21 43 4.0 2026-09-25 10:55:31 2026-09-25 11:08:43 3
22 45 1.0 2026-07-01 01:15:17 2026-07-01 01:40:37 5
23 45 3.0 2026-07-13 15:51:08 2026-07-13 16:09:08 3
24 45 4.0 2026-07-13 18:47:08 2026-07-13 19:05:47 3
25 45 6.0 2026-08-21 06:33:46 2026-08-21 07:58:24 10
26 45 7.0 2026-08-27 11:26:47 2026-08-27 11:34:11 3
27 45 8.0 2026-09-07 02:21:23 2026-09-07 02:34:31 3
28 51 1.0 2026-09-22 19:06:38 2026-09-22 19:15:13 2
29 51 3.0 2026-09-27 01:07:36 2026-09-27 01:20:02 3
30 51 4.0 2026-09-29 09:04:00 2026-09-29 09:10:29 2
31 56 1.0 2026-06-05 23:24:19 2026-06-05 23:56:24 5
32 56 3.0 2026-07-20 16:46:30 2026-07-20 17:02:06 3
33 56 4.0 2026-07-25 14:06:10 2026-07-25 14:12:51 3
34 56 6.0 2026-08-27 22:20:47 2026-08-27 22:56:20 3
35 56 7.0 2026-08-28 00:11:47 2026-08-28 00:14:56 2
36 56 8.0 2026-10-11 22:46:33 2026-10-11 23:09:05 5
37 1 2.0 2026-06-25 15:59:00 2026-06-25 16:03:03 3
38 1 5.0 2026-08-07 06:00:59 2026-08-07 06:16:45 3
39 1 9.0 2026-09-20 11:02:43 2026-09-20 11:11:52 3
40 21 2.0 2026-09-15 03:53:03 2026-09-15 04:12:15 3
41 21 5.0 2026-09-17 11:08:00 2026-09-17 11:41:55 3
42 21 9.0 2026-09-28 01:27:07 2026-09-28 01:34:45 3
43 21 10.0 2026-09-29 18:44:00 2026-09-29 18:54:46 3
44 21 11.0 2026-09-30 17:42:00 2026-09-30 17:47:20 2
45 21 14.0 2026-10-10 18:05:06 2026-10-10 18:26:55 3
46 25 2.0 2026-09-15 13:45:00 2026-09-15 14:03:39 3
47 42 2.0 2026-07-08 23:05:58 2026-07-08 23:30:18 4
48 42 5.0 2026-08-23 22:22:28 2026-08-23 22:41:09 3
49 5 2.0 2026-07-24 19:42:00 2026-07-24 19:56:47 3
50 5 5.0 2026-09-19 08:47:25 2026-09-19 08:57:03 3
显示前 50 行,共 447 行