统计每隔一段时间内的数据

这篇博客展示了如何使用SQL进行数据统计。首先创建了一个名为`se_meter_info_old`的表,并插入了一些样例数据。接着,提供了三个SQL查询示例:1) 按日期统计数据;2) 按30分钟间隔统计数据;3) 按自定义n分钟间隔统计数据。这些查询有助于理解如何处理和分析时间序列数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下字段自己随便测试定义的
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分钟的数据,得到时间段,统计数据

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值