Oracle SQL 累积产品
Posted
技术标签:
【中文标题】Oracle SQL 累积产品【英文标题】:Oracle SQL Cumulative Product 【发布时间】:2021-08-16 05:39:29 【问题描述】:我有一个与mysql cumulative product group by 类似的问题,但我无法让建议的解决方案适合我的情况。
我想将 5 个月的百分比变化值应用于静态值。我希望结果值是所有月份的累积值。
Report_Month | PCT_Change | Initial_Value |
---|---|---|
8/1/2021 | 0.1202 | 0.88 |
9/1/2021 | -.0426 | |
10/1/2021 | -0.0794 | |
11/1/2021 | 0.0726 | |
12/1/2021 | 0.1182 |
如果我在 Excel 中计算,输出将如下所示:
Report_Month | PCT_Change | Value |
---|---|---|
8/1/2021 | 0.1202 | 0.985776 |
9/1/2021 | -.0426 | 0.943781942 |
10/1/2021 | -0.0794 | 0.868845656 |
11/1/2021 | 0.0726 | 0.931923851 |
12/1/2021 | 0.1182 | 1.04207725 |
但是,当我使用 exp(sum(ln(x))) 方法时,这不是我得到的。这是使用 exp(sum(ln(0.88*(1+pct_change))) over (order by report_month)) 的输出。
Report_Month | PCT_Change | Value |
---|---|---|
8/1/2021 | 0.1202 | 0.9857 |
9/1/2021 | -.0426 | 0.8305 |
10/1/2021 | -0.0794 | 0.6728 |
11/1/2021 | 0.0726 | 0.6351 |
12/1/2021 | 0.1182 | 0.6249 |
任何帮助将不胜感激。
谢谢, 克里斯
【问题讨论】:
【参考方案1】:Initial_Value
的值必须乘以SUM()
窗口函数的结果,所以正确的表达式是:
0.88 * EXP(SUM(LN((1 + pct_change))) OVER (ORDER BY report_month))
请参阅demo。
【讨论】:
完美!这就是我喜欢 Stack Overflow 社区的原因。愚蠢的简单错误,但我一直用头撞墙试图弄清楚几个小时。谢谢@forpas!以上是关于Oracle SQL 累积产品的主要内容,如果未能解决你的问题,请参考以下文章