Я пытаюсь обновить таблицу, содержащую информацию о ценах на акции, чтобы они включали доходности этих акций, если они хранятся в разные периоды времени. Возврат вставляется в начале периода времени.
Следующая инструкция 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
и ret_6mth
.
Это то, что у меня есть, но обновление выполняется неправильно. Объединение, кажется, работает, поскольку оно соответствует правильному количеству строк, но не меняет никаких строк.
* Обновление *
Не уверен, почему, но этот код ниже, похоже, работает. Извините за путаницу. Я до сих пор не выяснил, что случилось и почему это не так, но сейчас работает. Ошибка пользователя. Я уверен.
* Обновление *
UPDATE
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))
SET
curr.ret_3mth = (mo3.price - curr.price)/curr.price,
curr.ret_6mth = (mo6.price - curr.price)/curr.price;
Спасибо за вашу помощь.