2017-12-27 170 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行,而不是最後一行)的平均值。

相關問題