首页 > 解决方案 > 基于前几行的 SQL 复合增长计算(变化率)

问题描述

给定一个“增长因素”列和一个起始值,我需要计算未来值。例如,如果提供的起始值为 1,则计算的“值”列将如下所示。因此,Value(t2) = Value(t1) x Growth_Factor(t2)。基本条件是 Value(t1) = Starting_Value x Growth_Factor(t1)。示例如下所示。 如何在计算值取决于先前计算值的 SQL(或 Presto)中计算它?

生长因子 价值 时间
1.2 1.2 1
1.1 1.32 2
1.5 1.98 3
1.7 3.366 4

标签: sqlpresto

解决方案


您可以对数求和并在完成后反转。除了一些小浮点错误的可能性之外,这将起作用。但是,一旦在每次迭代中将多个小数位加倍的数字相乘,您也会引入错误。

exp(
    sum(ln(growth)) over (order by time)
)

推荐阅读