我有一个由两列日期、价格组成的表格。我想更新列调用平均值。它将计算当前日期和之前几天的平均值。
我设法创建了一条 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/