表名为APPLICATION_TRAFFIC_DATA,包含三个字段:RECORD_TIME(DATE),LINK_ID(NUMBER(10)),TCP4_BYTE_IN(NUMBER(20)),其作用是用来记录链路的采样信息,每30秒向记录中写7500条记录,现在需要根据RECORD_TIME来计算每五分钟TCP4_BYTE_IN的和,其对应的sql语句如下:
select sum(TCP4_BYTE_IN) from APPLICATION_TRAFFIC_DATA t 
where t.record_time>starTime and t.record_time<startTime+5min group by t.LINK_ID.
为了获得一天的统计数据,我需要修改startTime参数重复执行上面的sql语句288次,由于表包含的记录很大,因此统计速度很慢,有没有办法用一个sql语句将一天的采样信息按照每5分钟求和的方式统计出来,谢谢!

解决方案 »

  1.   

    写一个存储过程,用Job去驱动,每隔一段时间执行。
      

  2.   

    用RECORD_TIME来分组求各
    group by (RECORD_TIME-trunc(sysdate)))1440/5
      

  3.   

    select (RECORD_TIME-trunc(sysdate)))1440/5 times,sum(TCP4_BYTE_IN) 
    from APPLICATION_TRAFFIC_DATA t 
    where t.record_time>starTime and t.record_time <startTime+5min 
    group by (RECORD_TIME-trunc(sysdate)))1440/5,t.LINK_ID
      

  4.   

    select (RECORD_TIME-trunc(sysdate)))*1440/5 times,sum(TCP4_BYTE_IN) 
    from APPLICATION_TRAFFIC_DATA t 
    where t.record_time>starTime and t.record_time <startTime+5min 
    group by (RECORD_TIME-trunc(sysdate)))*1440/5,t.LINK_ID
      

  5.   

    思路就是先获得现在距离当天0点经历的分钟数(record_time-TRUNC(record_time))*24*60
    然后除以5取整,按此值进行分组group by TRUNC((record_time-TRUNC(record_time))*24*60/5)