Думайте об этом как усечение выражения метки даты до следующей нижней пятиминутной границы.
Как вы можете это сделать?Это (длинное) выражение работает:
DATE_FORMAT(datestamp,'%Y-%m-%d %H:00') +
INTERVAL (MINUTE(datestamp) - MINUTE(datestamp) MOD 5) MINUTE
Как это работает?
DATE_FORMAT(datestamp,'%Y-%m-%d %H:00')
дает час выражения.Например, он превращает 2001-09-11 08:42:00
в 2001-09-11 08:00:00
. (MINUTE(datestamp) - MINUTE(datestamp) MOD 5)
, извлекает минуты (42
в примере) и превращает их в следующую нижнюю пятиминутную границу 40
. hourvalue + INTERVAL minutevalue MINUTE
добавляет час и минуту вместе.2001-09-11 08:40:00
Итак, используйте это выражение в своем запросе, как в предложениях SELECT
и GROUP BY
.
SELECT sum(volume), max(price),
DATE_FORMAT(timestamp,'%Y-%m-%d %H:00') +
INTERVAL (MINUTE(timestamp) - MINUTE(timestamp) MOD 5) MINUTE
FROM btcusd_raw0
GROUP BY DATE_FORMAT(timestamp,'%Y-%m-%d %H:00') +
INTERVAL (MINUTE(timestamp) - MINUTE(timestamp) MOD 5) MINUTE;
Это подходит для подробных запросов.Вы можете рассмотреть возможность создания хранимой функции для него. Вот более полное объяснение .