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

计算SMA20并更新SQL表Kaffee时遇#1364报错求助

问题解决方案

错误原因

你用INSERT语句是在新增表记录,但只给sma20字段赋值,datum字段没有设置默认值,数据库无法为新生成的行填充datum值,因此触发#1364错误。而单独执行SELECT是基于已有数据计算移动平均,不需要新增行,所以能正常运行。

正确做法:用UPDATE更新已有行

要填充已有记录的sma20字段,应该使用UPDATE语句,结合子查询或CTE先计算出每个日期对应的20期移动平均,再关联更新原表:

方案1:子查询关联更新(兼容多数MySQL版本)

UPDATE kaffee t1
INNER JOIN (
    SELECT 
        datum,
        AVG(price) OVER(ORDER BY datum ROWS BETWEEN 20 PRECEDING AND CURRENT ROW) AS calc_sma20
    FROM kaffee
) t2 ON t1.datum = t2.datum
SET t1.sma20 = t2.calc_sma20;

方案2:CTE方式(MySQL 8.0+支持)

WITH sma_calculations AS (
    SELECT 
        datum,
        AVG(price) OVER(ORDER BY datum ROWS BETWEEN 20 PRECEDING AND CURRENT ROW) AS calc_sma20
    FROM kaffee
)
UPDATE kaffee t1
INNER JOIN sma_calculations t2 ON t1.datum = t2.datum
SET t1.sma20 = t2.calc_sma20;

注意事项

  • 如果datum字段存在重复值,建议使用表的主键(若有)作为关联条件,避免更新错误。
  • 对于表中前20条记录,窗口函数会自动计算从第一条到当前行的平均,符合简单移动平均线的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:05:14