Я прошу прощения, если этот вопрос был задан ранее. Я пытался выполнить поиск, но, возможно, не использовал ту же формулировку, что и другие, поэтому мои поиски ничего не дали.
У меня есть таблица из более чем 6000 строк, и я пытаюсь сделать среднее из предыдущего числа n строк определенного столбца. В этом случае цена закрытия валютной пары FOREX. (Я знаю, что мог бы использовать PHP :: Trader, но у меня нет доступа, чтобы установить его на моем сервере.)
Я пробовал :
SELECT *, (SELECT AVG(close)
FROM `2015_EURUSD_60min`
WHERE (id > (id - 20) AND id <= id)
)
FROM `2015_EURUSD_60min`
Это генерирует одинаковое число для каждой строки, и я не уверен, почему. Каждое значение в id
столбец является последовательным. Я очистил данные, чтобы убедиться в этом.
Что я сделал не так в своем SELECT
заявление?
Я думаю, что нашел ответ (хотя и с низкой производительностью) на мой вопрос:
SELECT *, @s:=@s+1 serial_num,
(SELECT AVG(close)
FROM `2015_EURUSD_60min`
WHERE (id > (@s-20) AND id <= @s )) prior_id
FROM `2015_EURUSD_60min`, (SELECT @s:=0) AS s
Других решений пока нет …