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

10 分钟内重复支付

中等 21-classic 面试经典题型 lagtime-diffduplicate-detectioninterval

统计重复支付的笔数。

  • 用户、商户、金额三者都相同的支付属于同一组(金额完全相等才算相同)。
  • 组内按 ts 升序排列。一笔支付如果与组内紧挨着的上一笔相隔 ≤ 10 分钟(恰好 10 分钟也算),就记为一笔重复支付。
  • 只和紧挨着的上一笔比较,不管上一笔本身是不是重复:例如同组在 0、8、16 分钟各付一次,后两笔都算重复。
  • 同组两笔的 ts 完全相同时,相隔 0 分钟,其中一笔算重复(只算 1 笔)。
  • 同一用户在同一商户先后付了不同金额,中间夹着的其他金额的支付不影响同金额支付之间的比较。
  • 输入行没有按时间排序。

输入

  • payments(payment_id, user_id, merchant_id, amount, ts):amount 为浮点,ts 为 datetime

输出

一行,列为 repeat_count(整数)。没有重复时输出 0。

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

payments local/base/payments
#payment_idint64user_idint64merchant_idint64amountfloat64tsdatetime
1 1 1 100 29.9 2026-09-01 10:00:00
2 2 1 100 29.9 2026-09-01 10:03:00
3 3 2 100 29.9 2026-09-01 10:04:00
4 4 1 200 29.9 2026-09-01 10:05:00
5 5 3 300 15.0 2026-09-01 11:00:00
6 6 3 300 15.0 2026-09-01 11:30:00
7 7 3 300 15.0 2026-09-01 11:35:00
8 8 4 100 99.0 2026-09-01 12:00:00
9 9 4 100 98.0 2026-09-01 12:01:00
10 10 5 400 5.5 2026-09-01 13:00:00
11 11 5 400 5.5 2026-09-01 13:00:30
12 12 5 400 5.5 2026-09-01 13:09:00
13 13 6 100 29.9 2026-09-02 09:00:00
共 13 行

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

#repeat_countInt64
1 4
共 1 行