使用每天的平均列更新mysql表

时间:2013-11-28 07:11:30

标签: mysql

我有一个由2列日期,价格组成的表格。我想更新列调用平均值。它将计算当前日期的平均值和之前的天数。

我设法创建一个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

由于

1 个答案:

答案 0 :(得分: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 演示

或(使用子查询)

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

注意:当您使用子查询时,您必须通过将目标表包装在另一个选择中来隐藏目标表。如果不这样做,您将收到错误消息

  

您无法在FROM子句

中为更新指定目标表<table_name>

这是 SQLFiddle 演示