在 MySQL 中使用分组依据来聚合 5 分钟的时间戳间隔



我有一个名为crypto的mySQL数据库,其中有一个名为coin的表格,其中包含三个不同的列:时间戳,价格,交易量。 问题如下:我想在 5 分钟内按时间戳对数据进行分组,其中字段价格显示最大值,字段交易量显示总和。

我尝试了以下命令:

SELECT sum(volume), max(price), 
round(unix_timestamp(addtime(date(0), timestamp) )/(15*60)) AS     
timestamp    
FROM btcusd_raw0
GROUP BY timestamp;

但它不会将日期时间作为列返回。

将此视为将日期戳表达式截断到下一个最低的五分钟边界。

你怎么能做到这一点?这个(长(表达式有效:

DATE_FORMAT(datestamp,'%Y-%m-%d %H:00') + 
INTERVAL (MINUTE(datestamp) - MINUTE(datestamp) MOD 5) MINUTE

它是如何工作的?

  1. DATE_FORMAT(datestamp,'%Y-%m-%d %H:00')给出了表达式的小时。例如,它将2001-09-11 08:42:00变成2001-09-11 08:00:00
  2. (MINUTE(datestamp) - MINUTE(datestamp) MOD 5)检索分钟(示例中42(并将其转换为下一个最低的五分钟边界40
  3. 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;

它会导致详细的查询。您可以考虑为其创建一个存储函数。这里有一个更完整的解释。

相关内容

  • 没有找到相关文章

最新更新