问一个需求的思路,算是时间切分吧

Tedd 发布于 2013/06/08 08:55
阅读 227
收藏 0

最近有一个需求,是做一个报表,该报表需要统率某个测试机一天24小时内的使用率,就是需要判断24小时之内从开始测试产品到结束测试之间这段时间在24小时内所占的比例.然后将所有测试机进行统计,按天求平均值.显示最近14天的记录,需要使用jfreechat的柱状图,一天的记录是一根柱子..

目前有两个思路,

1.写SQL从数据库里查数据,以测试开始时间(start time)为条件,一次性查出时间从14天之前到现在的数据,

select id,startTime,endTime from table where startTime between ? and ?  (简化的sql),然后将取出的结果放到一个list里面.现在就遇到了一个问题.如果取这个时间段的数据,如何将数据切分成一天一天的?就是以start time为准,比如某个测试机,从2013-06-06 14:35:36.0 开始测试,测试到2013-06-07 14:35:36.0,这样的一样记录就需要切成 2013-06-06 14:35:36.0 2013-06-07 00:00:00.0 和 2013-06-07 00:00:00.0 2013-06-07 14:35:36.0,然后按这两个时间段的统计结果放在6月6号和6月7号的记录里.我的疑问是,把这14天的结果放在一起的话,如何按天统计,关键是跨越几天的记录,该如何依次统计并放入当天的记录里?

2.写SQL查数据,但是仅仅只查询一天的数据,使用循环,一天循环一次,将每天的结果放在一起,但是这样面临的一个问题就是访问数据库太频繁了.

项目是用java写的,刚入门java不久.经验不丰富,所以请大家帮忙分析一个这个应该如何实现.谢谢了,第一次提问题,可能写的有点乱.见谅..



加载中
0
吴海兵1958

看你的需求,数据量应该不大,按照你的SQL查询出来的数据(最好加个开始时间排序),在内存中稍加处理就能实现。写下我的具体思路

首先以Map存储最终数据,key为日期(到天),value为统计值,如果业务复杂这里可以考虑用对象

其次遍历查询后的结果集,获取开始时间的日期,判断结束时间是否跨天,如果跨天,计算当天总时间,存入MAP中,然后将下一天的0点作为开始时间,同上计算,直到计算到结束时间,然后依次向下遍历

如果时间存在重叠,只需判断一下MAP中是否存在相应的键值,然后把汇总值累加即可

关于最后需要得到的数据格式,有这个MAP,转换一下应该不是问题

Tedd
Tedd
谢谢,数据量是不太大,一天的记录也就几百条,我当时也考虑用map,但是是用map存放查询出来的结果,而不是需要统计的结果,谢谢提醒,
返回顶部
顶部