在 mysql 中使用 group by 聚合 5 分钟的时间戳间隔
use group by in mysql to aggregate 5-minute timestamp intervals
我有一个名为 crypto 的 mySQL 数据库,其中我有一个名为 coin 的 table 数据库,其中包含三个不同的列:时间戳、价格、交易量。
问题如下:我想按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;
但它不会 return 日期时间作为列。
将此视为 截断 日期戳表达式到下一个最低的五分钟边界。
你怎么做到的?这个(长)表达式有效:
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;
它会导致冗长的查询。您可能会考虑为它创建一个存储函数。 Here's a more complete explanation。
我有一个名为 crypto 的 mySQL 数据库,其中我有一个名为 coin 的 table 数据库,其中包含三个不同的列:时间戳、价格、交易量。 问题如下:我想按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;
但它不会 return 日期时间作为列。
将此视为 截断 日期戳表达式到下一个最低的五分钟边界。
你怎么做到的?这个(长)表达式有效:
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;
它会导致冗长的查询。您可能会考虑为它创建一个存储函数。 Here's a more complete explanation。