2013-11-28 38 views
0

我有一個由2列日期,價格組成的表。我想更新列調用平均值。它會計算當前日期的平均值和前一天的平均值。每天更新mysql表的平均列數

我設法創建一個SELECT語句,但我在UPDATE語句之後。

SELECT t1.date, t1.price, COUNT(t2.date) AS DAYS, AVG(t2.price) AS avgprice 
FROM PriceTable AS t1, PriceTable AS t2 
WHERE t1.date >= t2.date 
GROUP BY t1.date 

這裏是什麼,我希望它看起來像一個鏈接:http://pastebin.com/t7PMz4Jc

感謝

+0

更新表設置指定目標表<table_name>的更新col =(從pricetab t1選擇Avg(t2.price),pricetab t2其中t1.pricetab> t2.pricetab group by ...) –

回答

1

嘗試這種方式(使用多表語法)

UPDATE PriceTable p JOIN 
(
    SELECT t1.date, AVG(t2.price) avgprice 
    FROM PriceTable t1 JOIN PriceTable t2 
     ON t1.date >= t2.date 
    GROUP BY t1.date 
) s 
    ON p.date = s.date 
    SET p.avgprice = s.avgprice; 

這裏是SQLFiddle demo

或(使用子查詢)

UPDATE PriceTable p 
    SET p.avgprice = 
(
    SELECT AVG(price) 
    FROM 
    (
    SELECT * 
     FROM PriceTable 
) q 
    WHERE date <= p.date 
); 

注:,當你使用子查詢你必須通過一個額外的選擇包裝它來隱藏從MySQL目標表。如果不這樣做,你會得到一個錯誤信息

不能在FROM子句

這裏是SQLFiddle演示

+0

是的,這很有幫助。謝謝您的幫助。 – torrentialdata

+0

@torrentialdata你很受歡迎。祝你好運 :) – peterm