Oracle内根据上一行总数和本行新增数计算本行总数
来源:互联网 发布:net.sf.json tobean 编辑:程序博客网 时间:2024/06/06 04:23
需求如下:
数据库内的一张表,每天都会有数据新增进来,有day字段做日期控制,每天有新增数和截止当日的总数两个字段值,现在根据前一天的总数和今天的新增数量计算截止今天的总数,SQL:
--1. 初始化每个区县的 第一条退休人口数据update T_FACT_SOCAIL_RETIRED tset t.totalcount = t.newcountwhere t.day = (select min(t2.day) from T_FACT_SOCAIL_RETIRED t2 where t2.areacode = t.areacode);
--2.循序渐进,计算后面每天 的退休人口总数,思路是,第二天的 退休人口总数 = 第一天的退休人口总数 + 第二天新增的退休人口总数,以此类推begin -- for t in (select * from T_FACT_SOCAIL_RETIRED t3 where t3.areacode = '340222' and t3.totalcount = 0 order by t3.day asc) loop update T_FACT_SOCAIL_RETIRED r set r.totalcount = r.newcount + (select totalcount from ((select r2.totalcount from T_FACT_SOCAIL_RETIRED r2 where r2.areacode = t.areacode and r2.day < t.day order by r2.day desc)) where rownum = 1) where r.day = t.day and r.areacode = t.areacode; end loop;end;begin for tt in (select distinct areacode from T_FACT_SOCAIL_RETIRED) loop for t in (select * from T_FACT_SOCAIL_RETIRED t3 where t3.areacode = tt.areacode and t3.totalcount = 0 order by t3.day asc) loop update T_FACT_SOCAIL_RETIRED r set r.totalcount = r.newcount + (select totalcount from ((select r2.totalcount from T_FACT_SOCAIL_RETIRED r2 where r2.areacode = t.areacode and r2.day < t.day order by r2.day desc)) where rownum = 1) where r.day = t.day and r.areacode = t.areacode; end loop; end loop;end;
--插入每天不存在的区县begin for tt2 in (select distinct day from T_Fact_Gas_Account) loop for tt in (select t1.areacode from t_dim_area t1 where t1.areatype in ('3','4') and t1.areacodenot in (select t2.areacode from T_Fact_Gas_Account t2 where t2.day=tt2.day)) loopinsert into T_Fact_Gas_Account values (substr(tt2.day,1,4),substr(tt2.day,1,6),tt2.day,tt.areacode,0,0);end loop;end loop;end;
--更新当前总数begin for tt in (select distinct areacode from T_Fact_Gas_Account) loop for t in (select * from T_Fact_Gas_Account t3 where t3.areacode = tt.areacode and t3.totalcount = 0 order by t3.day asc) loop update T_Fact_Gas_Account r set r.totalcount = r.newcount + nvl((select totalcount from ((select r2.totalcount from T_Fact_Gas_Account r2 where r2.areacode = t.areacode and r2.day < t.day order by r2.day desc)) where rownum = 1),0) where r.day = t.day and r.areacode = t.areacode; end loop; end loop;end;
0 0
- Oracle内根据上一行总数和本行新增数计算本行总数
- ios 根据总数和列数 计算显示行数
- 子网内主机数、子网数、主机总数计算方式
- 删除和计算总数
- 用Oracle RATIO_TO_REPORT计算总数百分比
- 点击本行选中行内复选框
- sql计算总数
- easyui的datagrid修改一行信息后,更新本行
- 数据超出本行 换到下一行展示的方法
- oracle分析函数系列之ratio_to_report:计算占总数百分比
- Oracle查看某个用户下所有表的记录总数和所有表的字段总数
- DataTable中根据某一个字段来改变本行格式
- 并发度及高并发计算总数和去重
- hadoop编程之mapreduce,计算总数和平均数
- 中国象棋局面总数粗略计算
- 计算页码总数(分页)
- 在ECSHOP首页显示商品总数和本月更新数
- 统计录入字符串的字符总数,单词数和行数
- Xcode常用插件
- iOS捕获异常,常用的异常处理方法
- Git(1)认识Git
- 大数据认知阶段——如何学习大数据相关技术
- iOS 推送 获取手机设备的 deviceToken
- Oracle内根据上一行总数和本行新增数计算本行总数
- Excel导出工具类
- proc相关操作
- Git(2)安装Git
- sqlite3常用的c语言函数接口
- 字符转换
- LibJpeg 使用说明(英文)
- ajax异步核心内容示例:实现页面中异步验证账号是否已存在
- 如何通过配置apache,让Wap主域名URL访问到子域名服务