我有一个由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
由于
答案 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 演示