计算每一小时在表中插入的行数

时间:2012-09-05 07:32:44

标签: sql

我遇到了每小时记录一次的问题。

我的表结构是

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)是不同的计数。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

您需要按照您正在计算的相同内容进行分组 - 即:FLOOR( TIME_TO_SEC( TIMEDIFF( NOW(), last_updated)) / 3600 )

目前,您正在计算一件事,但又是另一件事。