以下字段自己随便测试定义的
CREATE TABLE se_meter_info_old
(
guid
varchar(32) NOT NULL COMMENT ‘单引号’,
rest
tinyint(4) DEFAULT NULL,
twe
int(7) DEFAULT NULL,
create_time
datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘11’, -122, 0, ‘2022-07-18 16:50:44’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘1’, 22, 0, ‘2022-07-21 20:50:49’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘0’, 22, 1111, ‘2022-07-20 16:50:56’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘1’, 22, 0, ‘2022-07-20 14:51:00’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘11’, -122, 0, ‘2022-07-19 16:51:08’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘1’, 22, 0, ‘2022-07-22 16:51:12’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘0’, 22, 1111, ‘2022-07-23 16:51:15’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘1’, 22, 0, ‘2022-07-23 16:51:27’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘11’, -122, 0, ‘2022-07-20 16:51:27’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘11’, -122, 0, ‘2022-07-20 16:51:31’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘11’, -122, 0, ‘2022-07-21 16:51:35’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘11’, -122, 0, ‘2022-07-23 16:51:38’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘1’, 22, 0, ‘2022-07-18 16:51:42’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘2’, 22, 1111, ‘2022-07-18 16:51:45’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘1’, 22, 0, ‘2022-07-19 16:51:50’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘11’, -122, 0, ‘2022-07-19 16:51:55’);
INSERT INTO test
.se_meter_info_old
(guid
, rest
, twe
, create_time
) VALUES (‘1’, 22, 0, ‘2022-07-20 16:51:59’);
– 按照天数统计数据
select DATE(create_time) ,sum(guid),COUNT(*) from se_meter_info_old
GROUP BY DATE(create_time)
order by DATE(create_time) desc
– 按照每隔30分钟计数据
select CONCAT(a.date,'-', DATE_FORMAT(DATE_ADD(a.date,INTERVAL 30 MINUTE),'%Y-%m-%d %H:%i') ) _date ,a.total from (
select
DATE_FORMAT(CONCAT(DATE(create_time),' ',HOUR(CREATE_time),':',FLOOR(MINUTE(CREATE_time)/30 )*30),'%Y-%m-%d %H:%i') date,
sum(guid) total
from se_meter_info_old
group by date
order by date
) a
– 按照n分钟计数据
select CONCAT(a.date,'-', DATE_FORMAT(DATE_ADD(a.date,INTERVAL n MINUTE),'%Y-%m-%d %H:%i') ) _date ,a.total
from
(
select
DATE_FORMAT(CONCAT(DATE(create_time),' ',HOUR(CREATE_time),':',FLOOR(MINUTE(CREATE_time)/n ) *n ),'%Y-%m-%d %H:%i') date,
sum(guid) total
from se_meter_info_old
group by date
order by date
) a
思路 : 因为要根据时间段n统计数据,先找出全部数据,然后进行划分组,划分对应时间端n为组,时间段的选择,我这边是时间除以n后向下取整,找到最近的15分钟,这个n是针对分来的,比如间隔15分钟,那么16:10:22那么最近的组别就是16:00-16:15这段时间,然后首先计算出来的是这部分的数据,显示是为16:00,然后外面查询拼接后15分钟的数据,得到时间段,统计数据