Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 根据带有分钟时间戳的行获取每小时平均金额_Mysql_Sql_Database - Fatal编程技术网

Mysql 根据带有分钟时间戳的行获取每小时平均金额

Mysql 根据带有分钟时间戳的行获取每小时平均金额,mysql,sql,database,Mysql,Sql,Database,我的表结构如下所示: +---------+------------+----------+---------+-----------+------------+ | id | account_id | hashrate | workers | sharerate | timestamp | +---------+------------+----------+---------+-----------+------------+ | 1227368 | 42 |

我的表结构如下所示:

+---------+------------+----------+---------+-----------+------------+
| id      | account_id | hashrate | workers | sharerate | timestamp  |
+---------+------------+----------+---------+-----------+------------+
| 1227368 |         42 |   405211 |       1 |      6183 | 1534264380 |
| 1227367 |         12 |   450077 |       1 |      6868 | 1534264380 |
+---------+------------+----------+---------+-----------+------------+
每分钟为具有活动工作线程的用户创建一行

我试图显示一个图表,显示24小时内每小时的平均hashrate和sharerate

到目前为止,我的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查询还相当陌生,因此非常感谢您的帮助。

我们可以使用一个表达式,返回小时表示,基本上减少分和秒,然后按该表达式分组。一种可能是使用MySQL
DATE\u格式
函数

 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')
 --     ^^^^^^^^^^^^                          ^^^^^^^^^^^^^^^ 

尝试类似于
按小时分组(时间戳)请参阅: