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

如何在UPDATE语句中使用GROUP BY/HAVING实现分组计算并更新字段

分组更新同组最早日期字段SQL实现

需求说明

需对test_table表按id、indicator字段分组,取每组内最早的start_dt值,更新同组下所有记录的earliest_dt字段。
你提供的分组取最小日期子查询缺少和原表的关联匹配逻辑,无法直接用于更新,以下是可直接执行的正确写法:

写法1:MySQL 多表关联更新(执行效率高)

通过JOIN先预计算每个分组的最小日期,再关联原表做批量更新:

UPDATE test_table t1
INNER JOIN (
    SELECT
        id,
        indicator,
        MIN(start_dt) AS group_min_dt
    FROM test_table
    GROUP BY id, indicator
) t2
ON t1.id = t2.id AND t1.indicator = t2.indicator
SET t1.earliest_dt = t2.group_min_dt;

写法2:标准SQL通用写法(兼容PostgreSQL、Oracle、SQL Server等)

通过关联子查询逐行匹配对应分组的最小日期,兼容性更强:

UPDATE test_table t1
SET earliest_dt = (
    SELECT MIN(start_dt)
    FROM test_table t2
    WHERE t2.id = t1.id
      AND t2.indicator = t1.indicator
);

效果验证

执行上述任意语句后,表数据将和预期结果完全匹配:

  • 同id+indicator分组下所有记录的earliest_dt统一为该组最小的start_dt
  • 例如id=111、indicator=2分组最早日期为07/02,组内2条记录的earliest_dt都会更新为07/02,和样例结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:36:16