我在创建MySQL触发器时遇到问题 - 我想用temp
表中avg_temp
列的最后144条记录中的平均值更新表temperature_C
的最后一行的stats
列。我在INSERT发生之前通过phpmyadmin这样做。
我的代码,希望它有助于解释我希望代码执行的操作:
UPDATE avg_temp(`temp`)
SET (
SELECT `id`, AVG(`temperature_C`)
FROM `stats`
GROUP by `id`
LIMIT 144
)
ORDER BY id DESC
LIMIT 1
然而,这会引发语法错误。
如果有人可以帮助我,那将是美好的。
你可以使用一些subselect,对于正确的avg结果,你应该使用subselect来获得144行
update avg_temp
set temp = ( select avg(t1.temperature_C)
from (
SELECT id, temperature_C
FROM stats
ORDER BY id
LIMIT 144
) t1
)
where id = your_id
这应该是MySQL更新的正确语法,使用子查询来计算最后144个值的平均值:
UPDATE avg_temp SET `temp` = AVG(
(
SELECT `temperature_C`
ORDER BY id DESC
LIMIT 144
)
)
ORDER BY id DESC
LIMIT 1
你似乎想要:
UPDATE avg_temp
SET `temp` = (SELECT AVG(temperature_C)
FROM (SELECT s.temperature_C
FROM stats s
ORDER BY id DESC
LIMIT 144
) s
)
ORDER BY id DESC
LIMIT 1;
但是,我会非常怀疑你这样做的愿望,特别是在触发器中。通常,触发器的效果取决于传递给触发器的记录中的数据。我想不出我曾经写过一个不引用这些数据的触发器(除测试或信息用途之外)的情况。
您似乎使用insert
作为计时机制。相反,您可能只想创建一个视图,该视图返回最后144行(或最后144行但只有一行)的平均值。