2013-11-28 4 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

обновление столовый набор col = (выберите Avg (t2.price) из pricetab t1, pricetab t2, где t1.pricetab> t2.pricetab group by ...) –

ответ

1

Try это следующим образом (с использованием синтаксиса нескольких таблиц)

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, обернув его в дополнительном выборе. Если не делать, что вы получите сообщение об ошибке

Вы не можете указать целевую таблицу <table_name> для обновления в ЕКОМ

Вот SQLFiddle демо

+0

Да, это было полезно. Спасибо за помощь. – torrentialdata

+0

@torrentialdata Вы очень желанны. Удачи :) – peterm

Смежные вопросы