這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)MySQL中按時間統(tǒng)計每個小時的記錄數(shù)的示例分析,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
為金寨等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及金寨網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、金寨網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
抽空在stack overflow轉(zhuǎn)了一圈, 看到一個有關(guān)SQL的提問, 大概轉(zhuǎn)述一下:
構(gòu)造語句:
點擊(此處)折疊或打開
CREATE TABLE `st` (
`id` varchar(8) NOT NULL,
`time` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
insert into st values('F41','2016-08-27 00:25:58');
insert into st values('F42','2016-08-27 01:15:03');
insert into st values('F43','2016-08-27 02:14:30');
insert into st values('F44','2016-08-27 02:24:12');
insert into st values('F45','2016-08-27 03:05:46');
insert into st values('F46','2016-08-27 04:08:07');
insert into st values('F47','2016-08-27 05:10:35');
insert into st values('F48','2016-08-27 07:12:32');
insert into st values('F59','2016-08-27 08:21:19');
insert into st values('F50','2016-08-27 09:19:26');
insert into st values('F51','2016-08-27 11:01:56');
insert into st values('F52','2016-08-27 12:09:38');
insert into st values('F53','2016-08-27 13:42:48');
insert into st values('F54','2016-08-27 14:47:26');
insert into st values('F55','2016-08-27 15:24:12');
insert into st values('F56','2016-08-27 16:22:05');
insert into st values('F57','2016-08-27 18:20:47');
insert into st values('F58','2016-08-27 19:11:09');
insert into st values('F59','2016-08-27 19:41:47');
insert into st values('F60','2016-08-27 19:57:06');
insert into st values('F61','2016-08-27 20:12:45');
insert into st values('F62','2016-08-27 21:55:41');
insert into st values('F63','2016-08-27 22:17:38');
insert into st values('F64','2016-08-27 23:15:17');
需要按小時來統(tǒng)計記錄的數(shù)量, 結(jié)果期望如下:
點擊(此處)折疊或打開
ID time count
------------------------------------------
1 00:00:00 1
2 01:00:00 1
3 02:00:00 1
4 03:00:00 2
5 04:00:00 1
6 05:00:00 1
7 06:00:00 1
8 07:00:00 0
9 08:00:00 1
10 09:00:00 1
11 10:00:00 1
12 11:00:00 0
13 12:00:00 1
14 13:00:00 1
15 14:00:00 1
16 15:00:00 1
17 16:00:00 1
18 17:00:00 1
19 18:00:00 0
20 19:00:00 1
21 20:00:00 3
22 21:00:00 1
23 22:00:00 1
24 23:00:00 1
這個問題有兩個"關(guān)鍵點":
1. 某個時間段, 不存在的記錄, 需要輸出0;
2. 這個計數(shù), 是less than time的計數(shù)方法, 即19:xx:xx的記錄是記到20:00:00下面的, 而不是19:00:00;
首先解決時間的提取問題;
利用date_format和hour, 就可以把小時數(shù)提取出來了,
同時需要用concat去拼接一下字符串, 展示出20:00:00這種效果;
為了達成關(guān)鍵點2的要求, 需要稍微處理一下hour的結(jié)果, 使用case when來加工一下,
最后的語句如下:
點擊(此處)折疊或打開
select @rownum := @rownum + 1 AS ID,
concat((case when t.hour = 24 then 0 else t.hour end),':00:00') as time, count(*) as count
from (select id, hour(date_format(time,'%H:%i:%s'))+1 as hour from st) t,
(SELECT @rownum := 0) r
group by time order by ID
效果如下:
可以看到這個語句基本滿足了關(guān)鍵點2了:
現(xiàn)在還缺少關(guān)鍵點1的解決辦法: 某個時間段, 不存在的記錄, 需要輸出0;
目前想到的辦法, 就是在表中提前插入占位用的無效數(shù)據(jù), 然后在count數(shù)量上-1;
PS: _(:з」∠)_水平有限, 感覺靠SQL來做的話, 沒什么太好的思路了....
上述就是小編為大家分享的MySQL中按時間統(tǒng)計每個小時的記錄數(shù)的示例分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。