求助SQL逐行迭代计算问题

kawashimawind 2019-11-06 12:49:17
我的表结构是这样的
序号 基本价格 增长率 费率
1 1000 1.001909737 1.70333E-05
2 1000 1.004233607 0.0000365
3 1000 1.00409676 0.0000395
4 1000 1.004233607 0.0000395
5 1000 1.004233607 0.0000395
6 1000 1.00409676 0.0000395
7 1000 1.004233607 0.0000395
8 1000 1.00409676 0.0000395
9 1000 1.004233607 0.0000395
10 1000 1.004233607 0.0000395
11 1000 1.003823121 0.0000395
12 1000 1.004233607 0.0000395
13 1000 1.00409676 0.0000395
14 1000 1.004233607 0.0000395
15 1000 1.00409676 0.0000425
16 1000 1.004233607 0.0000425
17 1000 1.004233607 0.0000425
18 1000 1.00409676 0.0000425
19 1000 1.004233607 0.0000425
20 1000 1.00409676 0.0000425
...

我需要加入三列:初始价格、费用、最终价格
第一行的初始价格是“基本价格”*0.98,也就是980,之后每行初始价格是上一行的最终价格
费用 是每行 round(初始价格*费率,2),最终价格 是 round(初始价格*增长率-费用,2)
具体结果是(用Excel计算结果)

序号 基本价格 增长率 费率 初始价格 费用 最终价格
1 1000 1.001909737 1.70333E-05 980 0.02 981.85
2 1000 1.004233607 0.0000365 981.85 0.04 985.97
3 1000 1.00409676 0.0000395 985.97 0.04 989.97
4 1000 1.004233607 0.0000395 989.97 0.04 994.12
5 1000 1.004233607 0.0000395 994.12 0.04 998.29
6 1000 1.00409676 0.0000395 998.29 0.04 1002.34
7 1000 1.004233607 0.0000395 1002.34 0.04 1006.54
8 1000 1.00409676 0.0000395 1006.54 0.04 1010.62
9 1000 1.004233607 0.0000395 1010.62 0.04 1014.86
10 1000 1.004233607 0.0000395 1014.86 0.04 1019.12
11 1000 1.003823121 0.0000395 1019.12 0.04 1022.98
12 1000 1.004233607 0.0000395 1022.98 0.04 1027.27
13 1000 1.00409676 0.0000395 1027.27 0.04 1031.44
14 1000 1.004233607 0.0000395 1031.44 0.04 1035.77
15 1000 1.00409676 0.0000425 1035.77 0.04 1039.97
16 1000 1.004233607 0.0000425 1039.97 0.04 1044.33
17 1000 1.004233607 0.0000425 1044.33 0.04 1048.71
18 1000 1.00409676 0.0000425 1048.71 0.04 1052.97
19 1000 1.004233607 0.0000425 1052.97 0.04 1057.39
20 1000 1.00409676 0.0000425 1057.39 0.04 1061.68
...
...全文
186 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kawashimawind 2019-11-06
  • 打赏
  • 举报
回复
感谢两位老师,完美解决了我这个SQL新手的问题
stelf 2019-11-06
  • 打赏
  • 举报
回复
先试试递归吧,看这样是否满足你的需求。 with mt as (select 1 as id, 1000 as bas_price, 1.001909737 as incr_rate, 0.0000170333 as fee_rate from dual union all select 2, 1000, 1.004233607, 0.0000365 as fee_rate from dual union all select 3, 1000, 1.00409676, 0.0000395 as fee_rate from dual union all select 4, 1000, 1.004233607, 0.0000395 as fee_rate from dual union all select 5, 1000, 1.004233607, 0.0000395 as fee_rate from dual), tmp(id, bas_price, incr_rate, fee_rate, initial_price, fee, final_price) as (select mt.id as id, mt.bas_price as bas_price, mt.incr_rate as incr_rate, mt.fee_rate as fee_rate, mt.bas_price * 0.98 as initial_price, round(mt.bas_price * 0.98 * mt.fee_rate, 2) as fee, round(mt.bas_price * 0.98 * (mt.incr_rate - mt.fee_rate), 2) as final_price from mt where mt.id = 1 union all select mt.id, mt.bas_price, mt.incr_rate, mt.fee_rate, tmp.final_price, round(tmp.final_price * mt.fee_rate, 2), round(tmp.final_price * (mt.incr_rate - mt.fee_rate), 2) from tmp inner join mt on tmp.id + 1 = mt.id where tmp.id < 5) select * from tmp;
nayi_224 2019-11-06
  • 打赏
  • 举报
回复

create table ty_1106(id number, jb number, zz number, fl number);

with t0(id, jb, zz, fl, chushi, fy, fin) as (
select t1.id,
       t1.jb,
       t1.zz,
       t1.fl,
       t1.jb * 0.98,
       round(t1.jb * 0.98 * t1.fl, 2),
       round(t1.jb * 0.98 * t1.zz - round(t1.jb * 0.98 * t1.fl, 2), 2)
  from ty_1106 t1 where t1.id = 1
union all
select t1.id,
       t1.jb,
       t1.zz,
       t1.fl,
       t0.fin,
       round(t0.fin * t1.fl, 2),
       round(t0.fin * t1.zz - round(t0.fin * t1.fl, 2), 2)
  from ty_1106 t1, t0 t0 where t1.id = t0.id + 1
)
select*from t0;
通过慢sql分析的学习,了解什么是慢sql,以及慢SQL会引起那些性能问题。清楚慢sql日志的设置,然后再通过慢sql分析工具的学习,清楚慢sql分析的步骤和流程。慢sql分析工具:mysqldumpslow工具、explain工具、profile工具、Optimizer Trace工具。 提供课程中所使用的sql语句。 课程内容:第一章:课程简介1、课程介绍2、课程大纲 第二章:慢sql简介1、慢sql简介2、慢sql会引起的问题 第三章:慢日志的设置1、慢sql的分析流程2、慢日志参数理解3、慢日志参数设置:第1种方式:my.ini文件设置4、慢日志参数设置:第2种方式:sql脚本设置5、慢日志参数设置-效果验证 第四章:如何发现慢sql1、如何发现慢sql:第1种方式:慢日志文件2、如何发现慢sql:第2种方式:mysql库的slow_log表 第五章:慢sql分析工具1、慢sql提取-mysqldumpslow工具-使用方法2、慢sql提取-mysqldumpslow工具-操作实战3、慢sql的执行计划分析-explain分析-执行计划结果说明4、慢sql的执行计划分析-explain分析-索引介绍+type类型举例5、慢sql的资源开销分析-profile分析-分析步骤6、慢sql的资源开销分析-profile分析-show profile执行阶段说明7、慢sql的资源开销分析-profile分析-完整列表说明+操作实战8、慢sql的跟踪分析-Optimizer Trace分析-分析步骤9、慢sql的跟踪分析-Optimizer Trace表的介绍10、索引失效场景举例 第六章:慢日志清理1、慢日志清理

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧