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

如何关联更新boxes表,写入containers_measure的最新P_Si值

解决思路与可行SQL方案

方法1:子查询筛选最新记录后关联更新

先通过分组子查询拿到每个number对应的最大meas_date,再关联containers_measure表获取对应的P_Si值,最后与boxes表关联完成更新:

UPDATE boxes b
JOIN (
    SELECT cm.number, cm.P_Si
    FROM containers_measure cm
    JOIN (
        SELECT number, MAX(meas_date) AS latest_date
        FROM containers_measure
        GROUP BY number
    ) latest_cm 
    ON cm.number = latest_cm.number AND cm.meas_date = latest_cm.latest_date
) cm_latest 
ON b.number = cm_latest.number
SET b.power = cm_latest.P_Si;

方法2:窗口函数筛选最新记录(适用于支持窗口函数的数据库)

如果你的数据库(如MySQL 8.0+、PostgreSQL、SQL Server等)支持窗口函数,可以用ROW_NUMBER()按number分组,按meas_date倒序排序,取每组第一条(最新记录):

UPDATE boxes b
JOIN (
    SELECT number, P_Si
    FROM (
        SELECT 
            number, 
            P_Si,
            ROW_NUMBER() OVER(PARTITION BY number ORDER BY meas_date DESC) AS rn
        FROM containers_measure
    ) ranked_cm
    WHERE rn = 1
) cm_latest 
ON b.number = cm_latest.number
SET b.power = cm_latest.P_Si;

原SQL报错原因

HAVING子句仅用于分组后的结果过滤,必须配合GROUP BY使用,无法直接在UPDATE的JOIN关联条件中使用。上述两种方法都是提前通过子查询筛选出符合要求的最新记录,再执行更新操作,避开了语法限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:31:59