2017-12-27 169 views
0

我在创建MySQL触发器时​​遇到问题 - 我想更新表avg_temp的最后一行的列temp,最后一行的记录来自 列stats表。我在INSERT发生之前通过phpmyadmin执行此操作。
我的代码,希望它有助于解释什么是我想要的代码做:MySQL触发器 - 更新表中的最后一行,其平均值来自另一个表

UPDATE avg_temp(`temp`) 
SET (
    SELECT `id`, AVG(`temperature_C`) 
    FROM `stats` 
    GROUP by `id` 
    LIMIT 144 
) 
ORDER BY id DESC 
LIMIT 1 

然而,这将引发一个语法错误。

如果有人能帮助我,那就太好了。

+0

您应该设置列。尝试'更新avg_temp设置温度(...'我也会删除在内部选择仍然是'编组ID'的id列。 –

回答

0

这应该是MySQL的更新来计算最后的144个值的平均值正确的语法,使用sublquery:

UPDATE avg_temp SET `temp` = AVG(
    (
    SELECT `temperature_C` 
    ORDER BY id DESC 
    LIMIT 144 
) 
) 
ORDER BY id DESC 
LIMIT 1 
0

Yyou可以使用一些子查询 和正确的平均结果,你应该使用子查询为得到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 
0

你似乎想:​​

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行,而不是最后一行)的平均值。

相关问题