我有一个具有以下结构的mysql表
id name_id class_id currency date value change
1 BILL A 0 04-01-2013 10.00 0
5 BILL A 0 04-02-2013 9.90 0
12 FRED A 0 04-01-2013 8.00 0
13 FRED B 1 04-02-2013 8.50 0
22 FRED B 1 04-03-2013 8.51 0
当, 和相等时,我想change
根据当天的值与前一个日期值之间的差异来更新列。. . 所以在这个小摘录中,只有第 2 行将更新为,第 5 行将更新为.name_id
class_id
currency
-0.10
0.01
有 400,000 行,它们都有一个自动递增的 id,但这些 id 没有任何顺序。缺少周末和节假日日期,因此没有连续日期。
我似乎能够通过这样的查询来显示更改
SELECT pd.name_id,
pd.class_id,
pd.currency,
pd.date,
pd.value,
ROUND(pd.nav - (SELECT nav
FROM price_data as x
WHERE x.date < pd.date
AND x.name_id = pd.name_id
AND x.class_id = pd.class_id
AND x.currency = pd.currency
ORDER BY price_date DESC
LIMIT 1),5) as change
FROM price_data as pd
我试图修改它以进行更新,但我不断收到一个 mysql 错误,#1093 - You can't specify target table 'pd' for update in FROM clause
即使这样我也不确定这是正确的方法。使用php会更容易吗?
UPDATE price_data as pd
SET pd.change = (
pd.value - (SELECT value
FROM price_data as x
WHERE x.date < pd.date
AND x.fund_id = pd.fund_id
AND x.class_id = pd.class_id
AND x.currency = pd.currency )
)
感谢您提供的任何帮助。