oracle按开始时间和结束时间进行数据拆分的自定义函数
2014-12-17 16:52
309 查看
oracle按开始时间和结束时间进行数据拆分的自定义函数
故事背景:前段时间做数据报表时,遇到统计每个月的的住院人次(注意是“人次”,不是“人数”)怎么办呢,查询了资料(度娘),只发现了“兔子”大神写的有点靠谱(意思是有 点 高深),但是采用递归方法,数据少还可以接受,但我的数据量是亿级,怎么办呢,看来不能偷懒了,只能自己动手了,写的不好,或者有技术bug,或者有更好 的, 请call me(留言)多多包涵,共同成长
1)首先要创建一直表(admin_work_area),用来存储信息
create or
replace function fun_admin(d_tiem
in date) --d_tiem 是传入的时间
return number
as v_name number;
begin
DECLARE
CURSOR --游标
crs_testAvg
IS
select 住院就诊流水号,入院科室编码,入院时间,出院时间,出院科室名称,出院科室编码,sc
from (
select d.住院就诊流水号,d.入院科室编码,d.出院科室编码,d.入院时间,d.出院时间,d.出院科室名称,
round(d.出院时间 - d.入院时间)
as sc from dc_出院登记表 d
where d.出院时间 >= d_tiem) zd;
v_emp crs_testAvg%rowtype;
numinfo number(10);
i number(10);
j number(10):=0;
ij number(10):=0;
begin
for v_emp
in crs_testAvg loop
i:=0;
numinfo:=v_emp.sc;
--dbms_output.put_line(v_emp.sc);
while i
<= numinfo loop
ij:=i;
select
count(*) into j
from admin_work_area r where r.patient_id
= v_emp.住院就诊流水号and r.i
= ij ;
-- dbms_output.put_line(v_emp.住院就诊流水号 || LPAD( i,3,'--')||LPAD( j,3,'--') );
if j=0
then
insert
into admin_work_area(dept_name,dept_id
,open_time,patient_id,sj,i)
values( v_emp.出院科室名称,v_emp.出院科室编码,v_emp.入院时间+i,v_emp.住院就诊流水号,to_char(v_emp.入院时间+i,'yyyy-mm'),i);
commit;
end
if;
i:=i+1;
end
loop;
end
loop;
v_name:=1;
return v_name;
end;
end fun_admin;
相关文章推荐
- Oracle根据时间将一条记录进行分割成多条(开始时间与结束时间跨几天就分割成几条)
- bootstrap-datepicker限定可选时间范围 一、应用场景 实际应用中可能会根据日期字段查询某个日期范围内的数据,则需要对日期选择器可选时间进行限制, 如:开始时间不能大于结束时间,
- oracle获取上一旬的开始时间和结束时间的实现函数
- ORACLE取周、月、季、年的开始时间和结束时间
- oracle根据时间对数据进行统计每天生成的量
- Oracle日期周详解以及周开始结束时间计算
- 如何查rman每个数据文件的备份开始及结束时间
- SQL语句实现:输入开始和结束时间,得到1小时间隔的平均数据。
- JS时间戳比较大小:对于一组时间戳(开始时间~结束时间)和另一组时间戳进行比较,用于判断被比较时间戳组是否在要求范围内
- oracle 查询开始和结束日期之间的数据(闭区间)
- oracle获取上一旬的开始时间和结束时间的函数
- ORACLE取周、月、季、年的开始时间和结束时间
- 转:Oracle日期周详解以及周开始结束时间计算
- oracel sql语句:查询时间段中开始时间与结束时间相同的数据
- Oracle日期周详解以及周开始结束时间计算
- ORACLE取周 月 季 年的开始时间和结束时间
- ORACLE取周、月、季、年的开始时间和结束时间
- 关于Web项目里的给表单验证控件添加结束时间不得小于开始时间的验证方法,日期转换和前台显示格式之间,还有JSON取日期数据格式转换成标准日期格式的问题
- Oracle日期周详解以及周开始结束时间计算
- C# 通过一个开始时间和结束时间 按【AddDays】拆分成一个数组