我正在尝试更新包含股票定价信息的表格,以包含这些股票的回报,如果持有不同的时间段。返回在时间段开始时插入。
以下SELECT语句计算我正在查找的值,包含3个月和6个月的保留期。该表格为price_returns
SELECT
curr.date, curr.company, curr.price,
(mo3.price - curr.price)/curr.price AS 3MONTH_RETURN,
(mo6.price - curr.price)/curr.price AS 6MONTH_RETURN
FROM
price_returns AS curr
LEFT OUTER JOIN
price_returns AS mo3
ON
((curr.date = LAST_DAY(mo3.date - INTERVAL 3 MONTH)) AND (curr.company = mo3.company))
LEFT OUTER JOIN
price_returns AS mo6
ON
((curr.date = LAST_DAY(mo6.date - INTERVAL 6 MONTH)) AND (curr.company = mo6.company))
Order by
curr.company, curr.date;
我想将此SELECT
转换为UPDATE
到表price_returns
中,并将3MONTH_RETURN
和6MONTH_RETURN
插入列ret_3mth
和{ {1}}。
这就是我所拥有的,但它没有正确执行更新。该连接似乎正在工作,因为它匹配正确的行数,但它不会更改任何行。
*更新*
不确定原因,但下面的代码现在似乎正在运行。对困惑感到抱歉。我还没有弄清楚发生了什么,为什么不是,但现在正在发挥作用。用户错误我确定。
*更新*
ret_6mth
感谢您的帮助。
答案 0 :(得分:2)
您可以使用子查询(http://dev.mysql.com/doc/refman/5.0/en/subqueries.html)执行此操作
UPDATE price_returns SET curr.ret_3mth = (SELECT (mo3.price - curr.price)/curr.price in here with the join),
curr.ret_6mth = (Select (mo6.price - curr.price)/curr.price in here with the join)
所以在括号中有子查询,你将通过上面的整个选择代码(第一个mysql代码)