java 按时间统计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 按时间统计相关的知识,希望对你有一定的参考价值。

一星期内 0
一个月内 1
一季度内 2
一年内 3

jsp页面里的option里的value分别用0,1,2,3来代表

取得后到hibernate判断后执行相应语句

求实现思路和sql语句(例如:求一周内的成品出库单????)

Calendar nowDate=new GregorianCalendar();
Calendar startDate=new GregorianCalendar();
if("0".equals(value)) startDate.add(Calendar.WEEK_OF_YEAR,-1);//考虑到跨年的问题,最好用Calendar.DATE,-7)
if("1".equals(value)) startDate.add(Calendar.MONTH,-1);
if("2".equals(value)) startDate.add(Calendar.MONTH,-3);
if("3".equals(value)) startDate.add(Calendar.YEAR,-1);
将startDate和nowDate格式化成你数据库相应的时间格式
根据你数据库的时间字段查询时间大于startDate小于nowDate 可得到结果
参考技术A 把日期转换为天比较好,然后再判断 参考技术B 可以将你的 季度年月等换成天数来统计,也可以用sql 中的date()函数来做处理

java 按照时间来统计 去除重复数据

设备上安装的app应用,用户点击一次就会调用我们的接口,记录下信息:用户id,打开应用起始时间,结束时间,app名称等等。这些信息会生成log文件,log每一行就是上面记录的信息。这些数据要通过分析之后转存到DB里,为了以后可以在界面统计不同用户点击的次数:按小时、天、月、年。规则就是:如果是按小时,那么同一个用户一小时不管点击多少次都算做1次;如果是按天,一天内不管点击多少次也只算做1次,以此类推。
我要做的就是,分析log的信息,数据库存储应该把这些时间单位都考虑进去。DB就是最终数据,以后我如果想在页面按小时、(天、周、月、年)来统计,直接从表里取数据就可以了。
现在问题就是:我该用什么逻辑或者算法,来把log信息转换成我想要的DB信息呢?而且还要考虑按照时间来去除重复数据。

你只需要考虑两点进行比较。
第一点:考虑用户ID,第二点:考虑时间
当你读取一条log信息的时候,取出用户ID和时间,
我不清楚你是实时的在执行往DB里面插入还是过一点时间整理,
如果是实时插入,那么你取出这个log信息的时候,就需要去现在的数据库里面进行匹配
带入用户ID,和时间,时间就以小时计算,如:2014-11-18 17
如果在数据库查询出了这条数据,那么跳出,如果没有查询出结果,那么新增。
第二种情况,如果你是隔一段时间执行一次,那么你就只需要新建一个list集合,
然后用取出的log的集合循环和新的list数据进行匹配,如果遇到有的就跳出,如果在新的list集合里面没有的
那么就添加到新的list集合里面。
写的有点乱,我这里不建议你用list,这样匹配的时候循环工作量非常大,建议使用hashmap,键值对处理起来方便,
以用户ID为key 方便处理。追问

我的想法也是通过用户id和时间去数据库里先找,也就意味着一个用户每天最多有24条记录。但是考虑到未来,如果用户量大到500w,怕数据库扛不住(我们用的Mysql)。还有什么更好的方式吗?

追答

那你就一个小时执行一次数据整理,这样你就不用去数据库里面找数据了,只需循环取出的log的集合进行循环,然后新增到新的集合里面,循环的同时你需要查询新的集合里面是否有和老集合里面重复的。

追问

你的思路我不是很明白 想加你好友来讨论。请指教 我的q:一7八三56756

参考技术A 我觉得你可以先把 所有的访问数据 都保存在数据库里面,这样操作数据库应该比操作天容易。

以上是关于java 按时间统计的主要内容,如果未能解决你的问题,请参考以下文章

java 按照时间来统计 去除重复数据

java 怎样实现记录一段时间内(如一个月)发生的事件,并且对其分类并统计次数?用链表吗 具体如何实现?

MySQL统计函数记录——按月按季度按日时间段统计

文本统计器(Java)

Oracle按时间段统计数据

MySQL按时间统计每个小时记录数