与Oracle SQL中的上一个值相乘
它很容易与Excel电子表格中的前一行相乘(或求和/除/等等),但是,到目前为止,我在Oracle SQL中还不能做到这一点与Oracle SQL中的上一个值相乘,sql,oracle,analytical,Sql,Oracle,Analytical,它很容易与Excel电子表格中的前一行相乘(或求和/除/等等),但是,到目前为止,我在Oracle SQL中还不能做到这一点 A B C 199901 3.81 51905 199902 -6.09 48743.9855 199903 4.75 51059.32481 199904 6.39 54322.01567 199905 -2.35 53045.4483 199906 2.65 54451.15268 199907
A B C
199901 3.81 51905
199902 -6.09 48743.9855
199903 4.75 51059.32481
199904 6.39 54322.01567
199905 -2.35 53045.4483
199906 2.65 54451.15268
199907 1.1 55050.11536
199908 -1.45 54251.88869
199909 0 54251.88869
199910 4.37 56622.69622
Above, column B is static and column C has the formula as:
((B2/100)+1)*C1
((B3/100)+1)*C2
((B4/100)+1)*C3
示例:第1行的51905乘以第2行的-6.09:
(-6.09/100)+1)*51905
我一直在尝试分析和窗口功能,但尚未成功。LAG函数可以给出当前行中的前一行值,但不能给出计算的前一行值。这可以在 演示:
您看过oracle的超前和滞后分析函数吗?如果您需要更多帮助,请告诉我初始值是51905吗?谢谢。它对我有用。显然,我还没有开始使用与模型相关的函数。一个令人兴奋的新事物
select *
FROM (
SELECT t.*,
row_number() over (order by a) as rn
from table1 t
)
MODEL
DIMENSION BY (rn)
MEASURES ( A, B, 0 c )
RULES (
c[rn=1] = 51905, -- value in a first row
c[rn>1] = round( c[cv()-1] * (b[cv()]/100 +1), 6 )
)
;
| RN | A | B | C |
|----|--------|-------|--------------|
| 1 | 199901 | 3.81 | 51905 |
| 2 | 199902 | -6.09 | 48743.9855 |
| 3 | 199903 | 4.75 | 51059.324811 |
| 4 | 199904 | 6.39 | 54322.015666 |
| 5 | 199905 | -2.35 | 53045.448298 |
| 6 | 199906 | 2.65 | 54451.152678 |
| 7 | 199907 | 1.1 | 55050.115357 |
| 8 | 199908 | -1.45 | 54251.888684 |
| 9 | 199909 | 0 | 54251.888684 |
| 10 | 199910 | 4.37 | 56622.696219 |