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

标签 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

谢谢

最佳答案

这样试试(使用多表语法)

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
);

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

You can't specify target table <table_name> for update in FROM clause

这里是SQLFiddle 演示

关于mysql - 使用每天的平均列更新 mysql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20259848/

相关文章:

php - 使用 PHP PDO 插入表 - 卡在execute() 语句上

php - 如何获取链接您的图像的网站的 URL?

python - Flask 和 Jinja2 中的异步数据库调用

php - 带有修改表的 Codeigniter 分页

MySQL货币存储

MySQL 查询以下内容

php - 如何在codeigniter中根据条件连接表

Java MySQL 与 ArrayLists 的集成

mysql - 我想在 mysql 中使用 if -else 语句

具有与分页相关的多个状态变化的 Mysql 查询