每月平均人数=每天人数之和/天数每天人数计算规则:
1、计算月末最后一天人数
2、除月末最后一天人数外,其它每天的人数,都是后一天人数-当天入职人数+当天离职人数create table AA (mon varchar2(20),ruzhi varchar2(20),lizhi varchar2(20),Renshu varchar2(20))
insert into AA
select '1月1日','10','8','0' from dual
union all select '1月2日','2','0','0' from dual
union all select '1月3日','0','2','0' from dual
union all select '1月4日','0','2','50' from dual--drop table AA
表结构说明:mon 日期;ruzhi 入职人数;lizhi 离职人数;Renshu 当天人数即:1月4日人数=50
1月3日人数=50-0+2=52
1月2日人数=52-2+0=50
1月1日人数=50-10+8=48人
请问根据月末人数,倒推出每天人数的循环如何写啊。
1、计算月末最后一天人数
2、除月末最后一天人数外,其它每天的人数,都是后一天人数-当天入职人数+当天离职人数create table AA (mon varchar2(20),ruzhi varchar2(20),lizhi varchar2(20),Renshu varchar2(20))
insert into AA
select '1月1日','10','8','0' from dual
union all select '1月2日','2','0','0' from dual
union all select '1月3日','0','2','0' from dual
union all select '1月4日','0','2','50' from dual--drop table AA
表结构说明:mon 日期;ruzhi 入职人数;lizhi 离职人数;Renshu 当天人数即:1月4日人数=50
1月3日人数=50-0+2=52
1月2日人数=52-2+0=50
1月1日人数=50-10+8=48人
请问根据月末人数,倒推出每天人数的循环如何写啊。
DECLARE
v_pre_num NUMBER := 0;
v_day_num NUMBER;
rn NUMBER := 0;
BEGIN
FOR i IN (SELECT * FROM aa ORDER BY mon DESC) LOOP
rn := rn + 1;
IF rn = 1 THEN
v_pre_num := i.Renshu;
END IF;
v_day_num := v_pre_num + ruzhi - lizhi;
UPDATE aa SET renshu = v_day_num WHERE mon = i.mon;
v_pre_num := v_day_num;
END LOOP;
COMMIT;
END;
/
(
ins_date date,
in_peo_cnt integer,
out_peo_cnt integer,
total_peo_cnt integer
);
truncate table tab_date_a;insert into tab_date_a values(to_date('2010-5-1','yyyy-mm-dd'),1,2,0);
insert into tab_date_a values(to_date('2010-5-2','yyyy-mm-dd'),3,2,0);
insert into tab_date_a values(to_date('2010-5-3','yyyy-mm-dd'),1,1,0);
insert into tab_date_a values(to_date('2010-5-4','yyyy-mm-dd'),6,2,0);
insert into tab_date_a values(to_date('2010-5-5','yyyy-mm-dd'),4,3,0);
insert into tab_date_a values(to_date('2010-5-6','yyyy-mm-dd'),1,8,100);
commit;select * from tab_date_a order by ins_date desc;declare
i int ;
j int;
begin
select count(*) into j from tab_date_a;
for i in 1..j
loop
update tab_date_a set total_peo_cnt=(select total_peo_cnt-in_peo_cnt+out_peo_cnt
from tab_date_a where ins_date=to_date('2010-5-6','yyyy-mm-dd')-i+1) where ins_date=
to_date('2010-5-6','yyyy-mm-dd')-i;
end loop;
end;