WITH CumulativeProduct AS (
SELECT
Value,
EXP(SUM(LOG(Value)) OVER (ORDER BY Id
ROWS UNBOUNDED PRECEDING)) AS CumulativeProduct
FROM
(VALUES
(1, 1.05),
(2, 1.15),
(3, 1.07)
)V(Id, Value)
)
SELECT * FROM CumulativeProduct;
这句话的意思EXP(SUM(LOG(Value)) OVER (ORDER BY Id))是,我们使用对数将乘法转换为加法。首先,我们对每个值取对数,然后对它们求和,最后应用指数来得到累积乘积。嗯,我不知道,也许它会有帮助。让我再强调一次——你需要检查,但不需要检查什么。这不是一个现成的代码,只是一张“空白”。
没有任何现实世界的例子,很难给出任何建议。但我会尝试一下(不经过测试),也许这个想法会起作用:
这句话的意思
EXP(SUM(LOG(Value)) OVER (ORDER BY Id))
是,我们使用对数将乘法转换为加法。首先,我们对每个值取对数,然后对它们求和,最后应用指数来得到累积乘积。嗯,我不知道,也许它会有帮助。让我再强调一次——你需要检查,但不需要检查什么。这不是一个现成的代码,只是一张“空白”。