2 qq78827534 qq78827534 于 2017.08.27 19:44 提问

java sql 问题,求帮忙 2C

有个问题,我每5分钟去查询某几个动态实时更新的表,统计这段时间的数量,然后把查询结果插入到数据库。数据格式例如name:table1 start: 20170827193000 end: 20170827193500 count :0 现在想查在半年内(某个间段)table1 有没有连续12 小时count 都是0的情况,sql能处理?或者 java方法怎么对查到的结果处理,自己想半天,还在晕

5个回答

liang_shui_guo
liang_shui_guo   2017.08.28 11:13

sql是不能处理,但是你可以把count按时间排序取出来,然后用java方法遍历和计数,如果出现连续60个count为0,就标记出来。

liang_shui_guo
liang_shui_guo 应该是连续144个
3 个月之前 回复
beyondlfover
beyondlfover   2017.08.28 11:24

为何不在这条数据入库前,往前查询12个小时看是否存在数据呢,这张表的数据可以直接作为半年内的结果数据做统计,
如果用SQL处理,性能非常低,在数据入库前根据时间段查询很快,如果出现满足条件直接入结果库就行,最后统计也在结果库统计就可行

u014626258
u014626258   2017.08.29 09:42

1、纠结的是查询的sql不知道咋写?
2、纠结查询出来不知道怎么处理?
3、既不知道怎么查询,也不知道怎么处理?

可以先把你会的写出来看看

leoox
leoox   2017.08.31 14:10

首先把半年数据为0的数据全部查出来

 select * form table where count  = 0 and start >= 20170201000000  order bu table,start

根据表名,和时间排序
放入LIst<table>  tableList中

然后循环处理:

 fro(int i = 0; i< tableList.size(); i++){
            T t1 = tableList.get(i);
         T t2 = tableList.get(i+ 144);
        if(t1.getName().equals(t2.getName())  && (t2.getStart().getTime()-t1.getStart().getTime()  == 1000*3600*12 )){
           resultList.add(t1);
        }

}

过程就是 每次循环都取144区间首位数据,然后判断是不是同一个表,在判断是不是相隔在12小时(1000*3600*12毫秒),
如果2个条件都满足, 说明在同一个表有连续144个数据的count = 0;最后把满足条件的起始的数据放入resultList中

lkhog
lkhog   2017.09.06 21:51

动态实时更新的表中是否会动态更新时间字段?若有 可以通过判断12小时内的count值 来进行之后操作 如没有 考虑添加 或用java 实现 可以写一个扫描进程 专门对该表进行扫描

Csdn user default icon
上传中...
上传图片
插入图片