有没有办法使用 unix 时间戳在 MySQL 中按一分钟分组?
Is there a way to group by one minute periods in MySQL using unix timestamps?
我有一个 MariaDB 数据库,其中包含一些游戏数据,我想使用 Grafana 绘制出每分钟插入了多少行。我正在使用 Node.js 脚本每分钟从游戏的 Public API 中获取数据并将其插入我的数据库,但是我不知道如何获取 MySQL 输出适用于 Grafana 的内容。我需要它做的是输出一个 table,其中包含一列新插入的数量和一分钟开始时的时间 window。我的数据库看起来像这样:
--------------------------------------------------------------------
| auction_id | seller | buyer | timestamp | price | bin | item_bytes |
--------------------------------------------------------------------
我有一个工作查询,用于返回 API 提供的当前数据的新插入数量,但是我不知道如何获取过去几分钟的历史数据。我正在寻找的输出看起来像这样:
-----------------------------
| new inserts | timestamp |
-----------------------------
| 234 | 1625373706053 |
-----------------------------
| 684 | 1625373666053 |
-----------------------------
| 720 | 1625373626053 |
-----------------------------
| 403 | 1625373586053 |
-----------------------------
注意时间戳如何每行减少 60,000
,相当于 60 秒或一分钟。我已经尝试使用 GROUP BY 以及我在 Whosebug 和其他网站上可以找到的几乎所有其他解决方案,但它仍然不起作用。
如果我不够清楚,请不要犹豫发表评论。
您可以使用 UNIX_TIMESTAMP
将自纪元以来的毫秒值转换为真正的日期时间。然后,按分钟汇总以获得计数:
SELECT
COUNT(*) AS `new inserts`,
FROM_UNIXTIME(timestamp / 1000, '%Y-%m-%d %H:%i') AS ts_minute
FROM yourTable
GROUP BY ts_minute
ORDER BY ts_minute;
我有一个 MariaDB 数据库,其中包含一些游戏数据,我想使用 Grafana 绘制出每分钟插入了多少行。我正在使用 Node.js 脚本每分钟从游戏的 Public API 中获取数据并将其插入我的数据库,但是我不知道如何获取 MySQL 输出适用于 Grafana 的内容。我需要它做的是输出一个 table,其中包含一列新插入的数量和一分钟开始时的时间 window。我的数据库看起来像这样:
--------------------------------------------------------------------
| auction_id | seller | buyer | timestamp | price | bin | item_bytes |
--------------------------------------------------------------------
我有一个工作查询,用于返回 API 提供的当前数据的新插入数量,但是我不知道如何获取过去几分钟的历史数据。我正在寻找的输出看起来像这样:
-----------------------------
| new inserts | timestamp |
-----------------------------
| 234 | 1625373706053 |
-----------------------------
| 684 | 1625373666053 |
-----------------------------
| 720 | 1625373626053 |
-----------------------------
| 403 | 1625373586053 |
-----------------------------
注意时间戳如何每行减少 60,000
,相当于 60 秒或一分钟。我已经尝试使用 GROUP BY 以及我在 Whosebug 和其他网站上可以找到的几乎所有其他解决方案,但它仍然不起作用。
如果我不够清楚,请不要犹豫发表评论。
您可以使用 UNIX_TIMESTAMP
将自纪元以来的毫秒值转换为真正的日期时间。然后,按分钟汇总以获得计数:
SELECT
COUNT(*) AS `new inserts`,
FROM_UNIXTIME(timestamp / 1000, '%Y-%m-%d %H:%i') AS ts_minute
FROM yourTable
GROUP BY ts_minute
ORDER BY ts_minute;