Вытягивание стандартного отклонения предыдущих 7 строк - MySQL 5.7 (нет возможностей оконных функций) - PullRequest
0 голосов
/ 25 июня 2019

Мне нужно рассчитать стандартное отклонение по ценам на акции, которые постоянно возвращаются на 7 дней назад. Например, у меня есть таблица, которая включает дату, цену, а затем название акции (поэтому на 27 мая есть 2 строки с 2 разными ценами, одна для акции A и одна для акции B):

| Дата | закрыть | сток |

| 27.05.2009 | 10 | A |

| 28.05.2009 | 15 | A |

| 29.05.2009 | 12 | A |

| 30.05.2009 | 13 | A |

| 31.05.2009 | 10 | A |

| 06/03/2019 | 11 | A |

| 06/04/2019 | 12 | A |

| 06/05/2019 | 15 | A |

| 06/06/2019 | 16 | A |

| 06/07/2019 | 17 | A |

| 27.05.2009 | 1353,5 | B |

| 28.05.2009 | 1356,2 | B |

| 29.05.2009 | 1352.65 | B |

| 30.05.2009 | 1355,65 | B |

| 31.05.2009 | 1354.2 | B |

| 06/03/2019 | 1356 | B |

| 06/04/2019 | 1351 | B |

| 06/05/2019 | 1352,5 | B |

| 06/06/2019 | 1350 | B |

| 06/07/2019 | 1349,3 | B |

Для каждого запаса (т.е. для запаса a, а затем для запаса b в таблице выше) мне нужно добавить столбец, который рассчитывает стандартное отклонение для предыдущих 7 строк:

+ ------------- + --------- + ----------- + ---------- ---------- +

| Дата | закрыть | акции | стандартное отклонение |

| 27.05.2009 | 10 | A |

| 28.05.2009 | 15 | A |

| 29.05.2009 | 12 | A |

| 30.05.2009 | 13 | A |

| 31.05.2009 | 10 | A |

| 06/03/2019 | 11 | A |

| 06/04/2019 | 12 | A | 1.772811

| 06/05/2019 | 15 | A | 1.902379

| 06/06/2019 | 16 | A | 2,13809

| 06/07/2019 | 17 | A | 2.636737

| 27.05.2009 | 1353,5 | B |

| 28.05.2009 | 1356,2 | B |

| 29.05.2009 | 1352.65 | B |

| 30.05.2009 | 1355,65 | B |

| 31.05.2009 | 1354.2 | B |

| 06/03/2019 | 1356 | B |

| 06/04/2019 | 1351 | Б | 1.935169

| 06/05/2019 | 1352,5 | Б | 2.027695

| 06/06/2019 | 1350 | Б | 2.261716

| 06/07/2019 | 1349,3 | Б | 2.696095

Я думаю, что проще разделить разные акции на разные таблицы, вычислить SD и затем объединить все вместе. Моя самая большая проблема заключается в том, что я использую MySQL 5.7, который не поддерживает функции Windows (т.е. отстает). У кого-нибудь есть предложения?

Я видел много прошлых вопросов, которые были аналогичны рекомендованным с использованием лимитов (упорядочены по дате и времени LIMIT 7), но мне нужно это для постоянного обновления в течение последних 7 дней, так как каждый день будет добавляться больше данных. Если я использую лимит и у меня есть данные за 3 недели, он просто вытянет первые 7, и я получу только одно вычисление SD, когда у меня будет 3. Я также видел этот пост Для каждой строки вычислите среднее значение для последних 20 строк в MySQL но похоже, что mysql 5.7 также не запускается во время циклов.

1 Ответ

0 голосов
/ 25 июня 2019

Вы можете использовать коррелированный подзапрос. Если у вас есть данные каждый день или если вы хотите, чтобы последние 7 дней :

select t.*,
       (select stddev(t2.close)
        from t t2
        where t2.date < t.date and
              t2.date >= t.date - interval 7 day
       ) as stdev_7
from t;

Сложнее получить последние 7 строк , если в данных есть пробелы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...