在mysql中使用groupby来聚合5分钟的时间戳间隔

monwx1rj  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(645)

我有一个名为crypto的mysql数据库,里面有一个名为coin的表,有三个不同的列:timestamp、price和volume。问题如下:我想在5分钟内按时间戳对数据进行分组,其中字段price表示最大值,字段volume表示总和。
我尝试了以下命令:

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

但它不以列的形式返回datetime。

yzxexxkh

yzxexxkh1#

将此视为将日期戳表达式截断到下一个最低的5分钟边界。
你怎么能这么做?此(长)表达式适用于:

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 在示例中)并将其转到下一个最低的5分钟边界 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;

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

相关问题