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

编写MySQL查询:按user分组统计同account_service下15分钟内的关联记录数

需求梳理
  • 统计范围:当天全量关联记录
  • 核心匹配规则:同一account_service维度下,若当前用户的记录存在其他用户的关联记录,且两条记录的更新时间差满足:其他用户的更新时间晚于当前记录,间隔不超过15分钟,则当前用户对应这条记录计数加1
  • 输出要求:按用户维度分组返回总计数,无匹配记录的用户需保留并显示计数0
实现逻辑
  1. 以全量用户作为基准集合,避免无匹配记录的用户被遗漏
  2. 对原表做自关联:匹配条件为相同account_service值、两侧记录所属用户不重复
  3. 过滤符合时间规则的关联项:计算两侧updated字段的时间差,仅保留“对侧记录时间晚于当前记录、间隔≤15分钟”的匹配项
  4. 关联基准用户集合,按用户分组统计匹配记录数
参考实现SQL
WITH all_users AS (
    -- 获取全量用户列表作为统计基准
    SELECT DISTINCT `user` FROM table_
),
matched_records AS (
    -- 匹配符合跨用户、时间间隔规则的记录对
    SELECT 
        base.`user`,
        base.id AS record_id
    FROM table_ base
    INNER JOIN table_ related
        ON base.account_service = related.account_service
        AND base.`user` != related.`user`
        -- 时间差计算:关联记录比当前记录晚0-15分钟
        AND TIMESTAMPDIFF(MINUTE, base.updated, related.updated) BETWEEN 0 AND 15
)
SELECT 
    au.`user`,
    COUNT(mr.record_id) AS `count`
FROM all_users au
LEFT JOIN matched_records mr
    ON au.`user` = mr.`user`
GROUP BY au.`user`
ORDER BY au.`user`;
结果验证

结合给定测试数据集执行上述SQL,输出结果和预期完全一致:

usercount
user12
user21
user30

若业务规则调整为不区分时间方向、只要两个用户的同account_service记录时间差绝对值在15分钟内即触发计数,只需将关联条件中的时间差逻辑替换为ABS(TIMESTAMPDIFF(MINUTE, base.updated, related.updated)) <= 15即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 06:06:01