Bal*_*ala 2 oracle function analytical
我有类似的问题.你能有人给我解决方案吗?下面是表值
10
20
30
40
Run Code Online (Sandbox Code Playgroud)
我想要像这样的输出
10 10-2 8
20 20-8 12
30 30-12 18
40 40-18 22
Run Code Online (Sandbox Code Playgroud)
按升序排序,并始终为第一个recrod减去2,并将结果用于后续记录.
Oracle 11g R2架构设置:
CREATE TABLE TEST ( VAL ) AS
SELECT 10 FROM DUAL
UNION ALL SELECT 20 FROM DUAL
UNION ALL SELECT 30 FROM DUAL
UNION ALL SELECT 40 FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
查询1:
WITH Parities AS (
SELECT VAL,
MOD( ROW_NUMBER() OVER ( ORDER BY VAL ), 2 ) AS Parity
FROM TEST
)
SELECT VAL,
ABS( SUM( CASE PARITY WHEN 1 THEN -VAL ELSE VAL END ) OVER ( ORDER BY VAL ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) + 2 ) AS total
FROM Parities
Run Code Online (Sandbox Code Playgroud)
结果:
| VAL | TOTAL |
|-----|-------|
| 10 | 8 |
| 20 | 12 |
| 30 | 18 |
| 40 | 22 |
Run Code Online (Sandbox Code Playgroud)