mysql - 根据带有分钟时间戳的行获取每小时平均金额
问题描述
我有一个看起来像这样的表结构:
+---------+------------+----------+---------+-----------+------------+
| id | account_id | hashrate | workers | sharerate | timestamp |
+---------+------------+----------+---------+-----------+------------+
| 1227368 | 42 | 405211 | 1 | 6183 | 1534264380 |
| 1227367 | 12 | 450077 | 1 | 6868 | 1534264380 |
+---------+------------+----------+---------+-----------+------------+
每分钟为具有活动工作人员的用户创建一行。
我正在尝试显示一个图表,该图表将显示 24 小时内每小时的平均哈希率和共享率。
到目前为止,我的 sql 查询是:
SELECT
timestamp,
SUM(hashrate) as hashes,
SUM(sharerate) AS shares
FROM statistics_users
WHERE FROM_UNIXTIME(timestamp) >= DATE_SUB(NOW(), INTERVAL 1 DAY)
GROUP BY timestamp;
返回:
+------------+------------+----------+
| timestamp | hashes | shares |
+------------+------------+----------+
| 1534177980 | 2282744244 | 34831913 |
这将返回 1440 个对象(一天中的每一分钟一个)。我想按小时对项目进行分组,并将从我的分钟查询返回的所有总和平均到一个小时。不知道从哪里开始,我对编写 sql 查询还很陌生,所以任何帮助都将不胜感激。
解决方案
我们可以使用一个表达式,它返回一个小时的表示,基本上修剪掉分钟和秒,然后GROUP BY
是那个表达式。一种可能是使用 MySQLDATE_FORMAT
函数。
SELECT DATE_FORMAT(FROM_UNIXTIME(t.timestamp),'%Y-%m-%d %H') AS ts_hr
, AVG(t.hashes)
, AVG(t.shares)
FROM (
-- original query goes here as inline view
SELECT timestamp
, SUM(hashrate) as hashes
, SUM(sharerate) AS shares
FROM statistics_users
WHERE FROM_UNIXTIME(timestamp) >= NOW() + INTERVAL -1 DAY
GROUP BY timestamp
) t
GROUP
BY DATE_FORMAT(FROM_UNIXTIME(t.timestamp),'%Y-%m-%d %H')
-- ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
请注意,WHERE 子句中的条件不考虑小时边界,因此我们将获得第一个小时的部分结果和最后一小时的部分结果。
规范不清楚,至于我们是否想要每个时间戳的总和的平均值,或者更简单
SELECT DATE_FORMAT(FROM_UNIXTIME(t.timestamp),'%Y-%m-%d %H') AS ts_hr
, AVG(t.hashrate)
, AVG(t.sharerate)
FROM statistics_users t
WHERE FROM_UNIXTIME(t.timestamp) >= NOW() + INTERVAL -1 DAY
GROUP
BY DATE_FORMAT(FROM_UNIXTIME(t.timestamp),'%Y-%m-%d %H')
-- ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format
推荐阅读
- python - 一对多和模型
- jquery - Laravel app.js 和 bootstrap.js 不包括在内?
- javascript - 如何将抽签动画渲染到画布对象
- wordpress - 如何将所有未登录的访问者重定向到 wordpress 中的特定页面?
- git - SCM Git 选项在 Jenkins 中被覆盖
- autodesk-forge - 是否可以将 Revit 文件转换为可以检索几何图形(XY 点/位置和形状)的格式?
- java - 无法使用 SimpleDateFormat 解析德语星期几缩写
- mysql - 我可以创建一个带有额外字符的复合键吗?
- kubernetes - Kubernetes HorizontalPodAutoscaler,用于由使用 KubernetesPodOperator 的 Airflow DAG 生成的 pod
- mysql - 如何在 MySQL 的同一语句中声明变量?