您的位置:程序门 -> db2 -> 基础类



记录的统计问题,有什么好的解决方案?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


记录的统计问题,有什么好的解决方案?
发表于:2007-08-01 09:45:01 楼主
我有一个表:就叫tablea,tableb吧,里面有这样的数据:

下面是tableb的数据:操作类型a代表新开,e代表修改,d代表删除

日志编号   编号   操作类型   速率
1                 101     a                 100m
2                 101     e                 200m
3                 101     e                 200m
5                 101     e                 50m
6                 101     d          

这个表的数据是对tablea的数据的修改而生成的,其中tablea的字段信息与tableb相似,只不过tableb是tablea的修改日志
其中tableb当中的编号是tablea的主键

现在我要对这个表里的数据进行统计:

增速,减速(统计相邻两条编号相同的记录即统计全为101的相邻两条记录)

其中增速包括由a-> e,当然日志编号为a的速率要小于日志编号为2的速率,这代表增速
上述记录中日志编号为1和2的记录为增速.
而编号记录为2和3的他们的速率相同则不增不减.这个可以不计.
而编号3和5的记录则为减速,因为编号3的速率为200m,编号为5的为50m,因此这说明减速一次.

最后想要的结果是对编号为101的记录信息,得到增速几次,减速几次?

大家有没有好的解决方案不防说说看.
发表于:2007-08-01 11:15:021楼 得分:0
create   function   (flag   varchar(2)--加减标志
                                  num   varchar(10)--编号
                              )
        returns   decimal   (20,2)
------------------------------------------------------------------------
--   sql   udf   (scalar)
--   flag   a--增加     s--减少
------------------------------------------------------------------------
f1:   begin   atomic
  declare         plus                   decimal   (10,0)     ;  
  declare         subtract           decimal   (10,0)     ;  
  declare         speednext         decimal   (10,0)     ;
  declare         speedup             decimal   (10,0)     ;
  declare         sum                     decimal   (10,0)     ;  


set   plus=0;
set   substract=0;
set   speednext=0;
set   speedup=0;
for   cur     as

          select   日志编号,   编号,   操作类型   ,速率     from   tableb   order   by   编号,   日志编号

do
      set   speedup=speednext;
      set   speednext=cur.速率
     
      if   flag= 'a '   and     speednext> speedup   then
               
          plus=plus+1;
          sum=plus;
     
      end   if;    
     
      if   flag= 's '   and   speednext <speedup   then
     
          substract=substract+1;
          sum=substract;    
      end   if;

      end   for;
           
      return   sum;
end
发表于:2007-08-01 11:15:332楼 得分:0
sorry   忘记写函数名了。


快速检索

最新资讯
热门点击