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 получаем максимальное значение строки {дата}_{цена}.
Александр Румянцев
Автор на Quantrum.me
Telegram-канал📣: @quantiki

Интересуетесь алготрейдингом на Python? Присоединяйтесь к команде.

☝Хотите торговать криптой? 🎓Учитесь у профи👍.