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

MySQL查询求助:按group_id分组统计子表时间差总和并关联父表

MySQL查询需求:按group_id分组计算子表时间差后求和

需要实现的逻辑:计算子表中隶属于同一parent_id的所有记录的总时间差(秒),要求先按group_id分组计算每组的时间差,再将各组时间差求和后关联父表输出。

表结构

父表(parent)

id
1
2

子表(child)

idparent_idgroup_idcreated_at
1112022-01-01 00:00:00
2112022-01-01 00:01:00
3122022-01-01 00:02:00
4122022-01-01 00:04:00
5232022-01-01 00:10:00
6232022-01-01 00:12:00

当前查询及问题

当前使用的查询语句:

SELECT
    id, (
        SELECT
            TIMESTAMPDIFF(SECOND, MIN(created_at), MAX(created_at))
        FROM
            `child`
        WHERE
            `parent`.`id` = `child`.`parent_id`
        LIMIT 1
    ) AS `child_elapsed_time_in_seconds`
FROM
    `parent`

查询结果:

idchild_elapsed_time_in_seconds
1240
2120

问题:该查询直接计算了同一parent_id下所有记录的最大与最小时间差,没有按group_id分组计算后再求和,导致id=1的结果错误(正确应为60+120=180秒)。

期望结果

idchild_elapsed_time_in_seconds
1180
2120

最终解决方案

参考优化后的查询语句:

SELECT
    id,
    (
        SELECT SUM(c.elapsed) AS child_elapsed_time_in_seconds
        FROM (
            SELECT group_id, TIMESTAMPDIFF(SECOND, min(created_at), max(created_at)) AS elapsed
            FROM child
            WHERE `parent_id` = `parent`.`id`
            GROUP BY group_id
        ) AS c
    ) AS `child_elapsed_time_in_seconds`
FROM
    `parent`

逻辑说明:

  1. 内层子查询先按group_id分组,计算每个组内的时间差(秒数);
  2. 外层子查询对同一parent_id下所有分组的时间差求和;
  3. 最终关联父表的id输出总时间差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:01:19