Sql 使用以前的值计算字段
我面临一个问题,涉及到计算字段的值,但使用前一行的值。表中包含数据的速率Sql 使用以前的值计算字段,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我面临一个问题,涉及到计算字段的值,但使用前一行的值。表中包含数据的速率 ID Original Rate Capital -- ------------------ ------- 1 50 1 2 50 + 1 1 3 50 + 1 + 1 1 4 50 + 1 + 1 + 2 2 5 50 + 1 + 1 + 2 + 2 2 公式
ID Original Rate Capital
-- ------------------ -------
1 50 1
2 50 + 1 1
3 50 + 1 + 1 1
4 50 + 1 + 1 + 2 2
5 50 + 1 + 1 + 2 + 2 2
公式为:原始利率(n)=原始利率(n-1)+资本
在original中,我有1行原始利率为50,我希望下一个值应该是原始利率+资本
我也尝试过使用,但它似乎不适用于计算字段
如果你们对这个案子有任何想法,请帮帮我
谢谢你抽出时间
新案例的更新:
+----+---------------+------+---------+-------+-------+-------+
| ID | Original Rate | Type | Capital | Rate1 | Rate2 | Rate3 |
+----+---------------+------+---------+-------+-------+-------+
| 1 | 50 | 1 | 2 | 0.1 | | |
| 2 | 50 | 1 | 2 | 0.1 | | |
| 3 | 50 | 1 | 2 | 0.1 | | |
| 4 | 50 | 2 | 1 | | 0.2 | |
| 5 | 50 | 3 | 5 | | | 0.3 |
+----+---------------+------+---------+-------+-------+-------+
New Rate (n) = New Rate (n-1) + Original Rate * IF(Type=1,Rate1*capital,IF(Type=2,Rate2*capital),Rate3*capital)
我期望的输出在最后一列中,如下所示:
+----+---------------+------+---------+-------+-------+-------+-----+
| ID | Original Rate | Type | Capital | Rate1 | Rate2 | Rate3 | |
+----+---------------+------+---------+-------+-------+-------+-----+
| 1 | 50 | 1 | 2 | 0.1 | | | 10 |
| 2 | 50 | 1 | 2 | 0.1 | | | 20 |
| 3 | 50 | 1 | 2 | 0.1 | | | 30 |
| 4 | 50 | 2 | 4 | | 0.2 | | 70 |
| 5 | 50 | 3 | 5 | | | 0.3 | 145 |
+----+---------------+------+---------+-------+-------+-------+-----+
欢迎任何意见和建议
[2017年4月17日更新]
我使用递归和
WITH RATE_MASTER AS (ID, RATE)
(
SELECT 1, ORIGINALRATE FROM RATE WHERE ID = 1
UNION ALL
SELECT ID,
CASE
WHEN TYPE = 1 THEN RATE + Rate1*Capital
WHEN TYPE = 2 THEN RATE + Rate2*Capital
WHEN TYPE = 3 THEN RATE + Rate3*Capital
END AS RATE
FROM RATE, RATE_MASTER
WHERE RATE_MASTER.ID = RATE.ID - 1
)
SELECT * FROM RATE_MASTER;
它工作正常强>
[关闭]Oracle安装程序:
CREATE TABLE rate ( id, capital ) AS
SELECT 1, 1 FROM DUAL UNION ALL
SELECT 2, 1 FROM DUAL UNION ALL
SELECT 3, 1 FROM DUAL UNION ALL
SELECT 4, 2 FROM DUAL UNION ALL
SELECT 5, 2 FROM DUAL;
SELECT id,
50 + SUM( capital ) OVER ( ORDER BY id )
- FIRST_VALUE( capital ) OVER ( ORDER BY id ) AS rate,
capital
FROM rate;
ID RATE CAPITAL
-- ---- -------
1 50 1
2 51 1
3 52 1
4 54 2
5 56 2
查询:
CREATE TABLE rate ( id, capital ) AS
SELECT 1, 1 FROM DUAL UNION ALL
SELECT 2, 1 FROM DUAL UNION ALL
SELECT 3, 1 FROM DUAL UNION ALL
SELECT 4, 2 FROM DUAL UNION ALL
SELECT 5, 2 FROM DUAL;
SELECT id,
50 + SUM( capital ) OVER ( ORDER BY id )
- FIRST_VALUE( capital ) OVER ( ORDER BY id ) AS rate,
capital
FROM rate;
ID RATE CAPITAL
-- ---- -------
1 50 1
2 51 1
3 52 1
4 54 2
5 56 2
输出:
CREATE TABLE rate ( id, capital ) AS
SELECT 1, 1 FROM DUAL UNION ALL
SELECT 2, 1 FROM DUAL UNION ALL
SELECT 3, 1 FROM DUAL UNION ALL
SELECT 4, 2 FROM DUAL UNION ALL
SELECT 5, 2 FROM DUAL;
SELECT id,
50 + SUM( capital ) OVER ( ORDER BY id )
- FIRST_VALUE( capital ) OVER ( ORDER BY id ) AS rate,
capital
FROM rate;
ID RATE CAPITAL
-- ---- -------
1 50 1
2 51 1
3 52 1
4 54 2
5 56 2
请将一些示例数据和预期结果以表格格式作为格式化文本发布。请单击“运行代码段”按钮?我还用数据更新了一个表。谢谢MT0,它可以处理示例数据。我要申请我的案子,很快就回来!