MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 1726|回复: 2
打印 上一主题 下一主题

时间段查询的疑问

[复制链接]
跳转到指定楼层
1#
发表于 2016-5-3 12:27:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我想做一个在一天的某一个时段内的每五分钟进行一次统计总和,如2015-01-05 6::30-23:00之间每五分钟中的表格数据,图片只是一个样例,不代表问题

743348496954965643.jpg (51.34 KB, 下载次数: 29)

743348496954965643.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享淘帖 顶 踩
2#
 楼主| 发表于 2016-5-3 15:47:16 | 只看该作者
就是说我要计算这个时间段内每五分钟,这五分钟里,有多少个数据是在这个五分钟内,多少个是在下一个五分钟内
3#
发表于 2016-9-8 13:49:13 | 只看该作者
两张表:一张时间表,一张测试数据表:

tmp_table_begin_end(一个开始时间,一个结束时间)

tmp_data(id,datastr,datavalue)
1        2016-09-08 13:36:21        1111
2        2016-09-08 13:08:21        2222
3        2016-09-08 13:04:21        3333
4        2016-09-08 13:03:21        44444


首先是生成时间组:
call p_hello('2016-09-08 13:00:00','2016-09-08 14:00:00',5);

相关存储过程:
/*
首先给定两个时间段


比如说begintime,endtime,baseminute=5

咱们以5分钟作为一个间隔


根据begintime和endtime,咱们生成出这些时间节点
*/
create procedure p_hello
(
in begintime datetime,
in endtime datetime,
in baseminute int
)
BEGIN

declare diffMinute int;       
declare repeatCount int;
declare nextbegintime datetime;
truncate table tmp_table_begin_end;

select TIMESTAMPDIFF(MINUTE,begintime,endtime) into diffMinute;
select CEILING(diffMinute/baseminute) into repeatCount;
set @i=1;

while @i<=repeatCount do
set nextbegintime=date_add(begintime, interval baseminute minute);
insert into tmp_table_begin_end(begintime,endtime) values (begintime,date_add(nextbegintime, interval -1 second));
set begintime=nextbegintime;
set @i=@i+1;
end WHILE;
END


然后我们开始测试数据:
call p_hello('2016-09-08 13:00:00','2016-09-08 14:00:00',5);

生成的时间节点为:
2016-09-08 13:00:00        2016-09-08 13:04:59
2016-09-08 13:05:00        2016-09-08 13:09:59
2016-09-08 13:10:00        2016-09-08 13:14:59
2016-09-08 13:15:00        2016-09-08 13:19:59
2016-09-08 13:20:00        2016-09-08 13:24:59
2016-09-08 13:25:00        2016-09-08 13:29:59
2016-09-08 13:30:00        2016-09-08 13:34:59
2016-09-08 13:35:00        2016-09-08 13:39:59
2016-09-08 13:40:00        2016-09-08 13:44:59
2016-09-08 13:45:00        2016-09-08 13:49:59
2016-09-08 13:50:00        2016-09-08 13:54:59
2016-09-08 13:55:00        2016-09-08 13:59:59

好了,然后一条测试sql:
select *,(select count(*) from tmp_data where datestr BETWEEN tmp_table_begin_end.begintime and tmp_table_begin_end.endtime) from tmp_table_begin_end

2016-09-08 13:00:00        2016-09-08 13:04:59        2
2016-09-08 13:05:00        2016-09-08 13:09:59        1
2016-09-08 13:10:00        2016-09-08 13:14:59        0
2016-09-08 13:15:00        2016-09-08 13:19:59        0
2016-09-08 13:20:00        2016-09-08 13:24:59        0
2016-09-08 13:25:00        2016-09-08 13:29:59        0
2016-09-08 13:30:00        2016-09-08 13:34:59        0
2016-09-08 13:35:00        2016-09-08 13:39:59        1
2016-09-08 13:40:00        2016-09-08 13:44:59        0
2016-09-08 13:45:00        2016-09-08 13:49:59        0
2016-09-08 13:50:00        2016-09-08 13:54:59        0
2016-09-08 13:55:00        2016-09-08 13:59:59        0


您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-5-19 06:29 , Processed in 0.119596 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表