You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于MySQL查询10分钟内存在连续交易的用户

找出存在间隔小于10分钟连续交易的用户(MySQL实现)

我来帮你搞定这个需求——从给定的交易表中筛选出那些有连续交易间隔小于10分钟的用户。下面提供两种适配不同MySQL版本的方案:

方案一:使用窗口函数(MySQL 8.0+ 推荐)

如果你的MySQL版本是8.0及以上,窗口函数是最简洁高效的实现方式。我们可以用LAG()函数获取每个用户上一笔交易的时间,然后计算时间差筛选符合条件的记录:

WITH user_transaction_sequence AS (
    SELECT 
        user_id,
        create_time,
        -- 按用户分组、交易时间排序,获取上一笔交易的时间
        LAG(create_time) OVER (PARTITION BY user_id ORDER BY create_time) AS previous_transaction_time
    FROM transactions
)
-- 去重得到符合条件的用户ID
SELECT DISTINCT user_id
FROM user_transaction_sequence
WHERE 
    -- 计算两次交易的分钟差,小于10分钟
    TIMESTAMPDIFF(MINUTE, previous_transaction_time, create_time) < 10
    -- 排除每个用户的第一笔交易(没有上一笔记录的情况)
    AND previous_transaction_time IS NOT NULL;

代码说明:

  1. 先用CTE(公共表表达式)给每个用户的交易按时间排序,同时关联上一笔交易的时间;
  2. 通过TIMESTAMPDIFF()函数计算两次交易的分钟间隔,筛选出间隔小于10分钟的记录;
  3. 最后用DISTINCT去重,得到所有符合条件的用户ID。

方案二:使用自连接(适配MySQL 5.x版本)

如果你的MySQL版本不支持窗口函数(比如5.7及以下),可以用自连接的方式实现:

SELECT DISTINCT t1.user_id
FROM transactions t1
INNER JOIN transactions t2 
    ON t1.user_id = t2.user_id
    -- 确保t1的交易时间晚于t2的交易时间
    AND t1.create_time > t2.create_time
    -- 计算两次交易的分钟间隔小于10分钟
    AND TIMESTAMPDIFF(MINUTE, t2.create_time, t1.create_time) < 10;

代码说明:

  1. 将交易表和自身做内连接,关联条件是同一个用户,且t1的交易时间晚于t2;
  2. 用TIMESTAMPDIFF()筛选出间隔小于10分钟的交易对;
  3. 通过DISTINCT去重,得到目标用户ID。

验证你的测试数据

根据你提供的交易数据,运行上述代码后会得到以下用户:

  • 101:有两笔交易间隔3分钟(8:34和8:37)
  • 106:有两笔交易间隔7分钟(13:11和13:18)

内容的提问来源于stack exchange,提问作者justnewbie89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:38:54