【问题标题】:Count number of rows inserted in a table for every one hour计算每小时插入表中的行数
【发布时间】:2012-09-05 07:32:44
【问题描述】:

我遇到了获取每小时记录数的问题。

我的表结构是

CREATE TABLE `statistics` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `uuid` VARCHAR(100) NULL DEFAULT NULL,
    `type_id` VARCHAR(50) NULL DEFAULT NULL,
    `in_time` TIMESTAMP NULL DEFAULT NULL,
    `out_time` TIMESTAMP NULL DEFAULT NULL,
    `error_id` INT(10) UNSIGNED ZEROFILL NULL DEFAULT NULL,
    `status` TINYINT(4) UNSIGNED NULL DEFAULT NULL,
    `last_updated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
)
ENGINE=MyISAM
AUTO_INCREMENT=1594;

我试过这样的查询:

SELECT FLOOR( TIME_TO_SEC( TIMEDIFF( NOW(), last_updated)) / 3600 ) HOURS,COUNT(*),error_id FROM statistics WHERE last_updated > DATE_SUB(NOW(), INTERVAL 24 HOUR) GROUP BY HOUR(last_updated) and error_id != 0 ORDER BY last_updated DESC;

输出是这样的

+-------+----------+
| HOURS | COUNT(*) |
+-------+----------+
|     1 |      205 | 
|     2 |       70 | 
|     3 |       14 | 
|     4 |       10 | 
|     5 |       16 | 
|     7 |       29 | 
|     8 |      412 | 
|     9 |       65 | 
|    10 |       79 | 
|    11 |      149 | 
|    12 |      317 | 
|    13 |      306 | 
|    14 |      356 | 
|    15 |      597 | 
|    16 |      433 | 
|    17 |      186 | 
|    18 |      527 | 
|    19 |      349 | 
|    20 |      397 | 
|    21 |      480 | 
|    22 |      460 | 
|    23 |      526 | 
|    23 |      411 | 
+-------+----------+ 

但这是不正确的。因为相同的小时数(23)是不同的计数。 提前致谢。

【问题讨论】:

    标签: sql


    【解决方案1】:

    您需要按您计算的相同事物进行分组 - 即:FLOOR( TIME_TO_SEC( TIMEDIFF( NOW(), last_updated)) / 3600 )

    目前,您正在计算一件事,但按另一件事分组。

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 2020-02-21
      • 2021-03-31
      • 2020-02-16
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多