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

第 3 次购买

中等 14-window-rank 窗口:排名 row-numbernthfilter-after-window

找出每个用户的第 3 次购买(event_type = 'purchase')事件。

  • 只看购买事件,其他类型的事件不计数。
  • 每个用户的购买事件按 ts 从早到晚排序,ts 相同时按 event_id 从小到大排;排在第 3 位的那一条就是第 3 次购买。同一秒内的多条购买各算一次。
  • 购买不足 3 次的用户不出现在结果里。
  • 表里的行不保证有序。

输入

  • events(event_id, user_id, ts, event_type, page)

输出

列为 user_id, event_id, ts(第 3 次购买那条事件的 id 和时间),每个用户最多一行,行顺序不限。

输入表 (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_idInt64event_idInt64tsDatetime(time_unit='us', time_zone=None)
1 41 350 2026-08-07 07:04:09
2 36 1243 2026-10-03 17:33:23
3 4 765 2026-09-13 05:35:11
4 45 985 2026-09-21 01:45:14
5 7 1335 2026-10-08 02:57:23
6 48 1407 2026-10-10 07:17:11
7 46 1433 2026-10-11 06:21:54
8 29 664 2026-09-08 02:40:56
9 47 1024 2026-09-21 22:23:14
10 28 379 2026-08-11 09:27:28
11 39 1391 2026-10-09 21:19:09
12 50 1067 2026-09-23 23:25:06
13 11 836 2026-09-16 12:01:00
14 26 1188 2026-10-01 12:01:00
共 14 行