MySQL: Как получить из дневных цен недельные?

Пусть здесь полежит SQL-запрос, который позволяет быстро получить цены более высокого таймфрейма из MySQL. На примере получения недельных цен из дневных.

SELECT
    symbol,
    MIN(dt) as `dt`,
    SUBSTRING_INDEX(MIN(CONCAT(`dt`, '_', `open`)), '_', -1) as `open`,
    MAX(high) as `high`,
    MIN(low) as `low`,
    SUBSTRING_INDEX(MAX(CONCAT(`dt`, '_', `close`)), '_', -1) as `close`,
    SUM(volume) as `volume`
FROM prices t
WHERE 1
GROUP BY symbol, DATE_FORMAT(dt, '%X%V')

Секрет успеха прост:

  • Группируем по тикеру и номеру недели (%V) с годом недели (%X).
  • Для цены open получаем минимальное значение строки {дата}_{цена}.
  • Для цены close получаем максимальное значение строки {дата}_{цена}.
Александр Румянцев aka "i.am.raa"
Автор Quantrum.me
Интересуетесь алготрейдингом на Python? Присоединяйтесь к команде. Пишите в личку или на email.
☝Хотите торговать криптой? 🎓Учитесь у профи👍.