ITPub博客

首页 > 数据库 > Oracle > oracle存储过程:把一个表的时间字段按照指定间隔进行分组,求和

oracle存储过程:把一个表的时间字段按照指定间隔进行分组,求和

Oracle 作者:duoyong 时间:2013-10-29 14:40:25 0 删除 编辑

oracle存储过程:把一个表的时间字段按照指定间隔进行分组,求和

说明:有张表是有一个时间字段和一个数量字段的,比如

10:02  10:04 10:16  10:08  10:10  10:12  10:14......

 12     14     15     14    13      17    20

现在需求是:根据指定时间字段分组求和,如02 04 06为一组   08 10 12为一组....求每组的数量和(sum)

 

原表:YF_TEST

oracle存储过程:把一个表的时间字段按照指定间隔进行分组,求和

 

临时表:YF_TEST1

oracle存储过程:把一个表的时间字段按照指定间隔进行分组,求和

创建的临时表比原表结构多了一个字段(g_time),最后就用这个字段来进行分组

原表数据:

oracle存储过程:把一个表的时间字段按照指定间隔进行分组,求和

临时表原来没有数据,执行存储过程后会有数据,执行后的临时表截图如下,存储过程会在最下面贴上来

oracle存储过程:把一个表的时间字段按照指定间隔进行分组,求和
最后要的结果

oracle存储过程:把一个表的时间字段按照指定间隔进行分组,求和

存储过程代码,因为没权限建标,所以临时表手动创建了

create or replace procedure test22(intervals in number) is
  --说明:新建一个临时表和原表结构一样,只不过多一个间隔表述字段(用来分组查询用)
  v_index    number; --索引变量
  v_tmp_time date; --临时时间变量,保存临时间隔字段数据
  v_interval number; --间隔条数
  cursor c1 is
    select y_time, y_value from yf_test t order by t.y_time asc;
  crow c1%rowtype;
begin
  v_index    := 0;
  v_interval := intervals;
  delete from yf_test1;
  commit;
  begin
    for crow in c1 loop
      begin
        if v_index = 0 or v_index = v_interval then
          begin
            v_index    := 0;
            v_tmp_time := crow.y_time;
          end;
        end if;
     
        insert into yf_test1
          (y_time, y_value, g_time)
        values
          (crow.y_time, crow.y_value, v_tmp_time);
        commit;
        v_index := v_index + 1;
      end;
    end loop;
    commit;
  end;
end test22;


 

 

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22275212/viewspace-1116944/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-08-05