Есть таблиица stock_data хранящая данные о ценах на акции
Для расчета некоторых финансовых показателей мне нужно сделать запрос который мог бы 3 раза JOINить одну и ту же таблиицу но с разными условиями:
- Выбрать данные хранящие разные Тикеры (ticker_id) чтоб сравнить их стоимость в один и тот же день (это не сложно)
- Выбрать эти же данные (отдельными колонками) только за предыдущий период
(Упрощенно таблица выглядит:
id|date|ticker_id|close )
Итого что есть (но не работает)
SELECT
data1.*,
data2.*,
data1.close/data2.close as ratio_of_price,
(select * from stock_data where date<data2.date and ticker_id=504 order by date desc limit 1) as new_id //нельзя указывать * тк ожидается только 1 колонка а не множество
FROM
stock_data data1
LEFT JOIN stock_data data2 ON data1.date = data2.date
WHERE
data1.ticker_id = 504
AND data2.ticker_id = 289
если во вложенном запросе поменять на id - то в теории его можно было бы джоинить, но . увы тоже не получается
SELECT
data1.*,
data2.*,
data1.close/data2.close as ratio_of_price,
(select id from stock_data where date<data2.date and ticker_id=504 order by date desc limit 1) as new_id
FROM
stock_data data1
LEFT JOIN stock_data data2 ON data1.date = data2.date
// невозможно приджоинить по new_id тк ругается что нет такого поля
WHERE
data1.ticker_id = 504
AND data2.ticker_id = 289