I have a query that should return V * previous C when MOD (rn, 2)! = 0, and should return V / previous C when MOD (rn, 2) = 0 (for each row sorted by rn).
select *
FROM (
Select 1 rn, 1 V from dual UNION ALL
Select 2 rn, 2 V from dual UNION ALL
Select 3 rn, 4 V from dual UNION ALL
Select 4 rn, 2 V from dual UNION ALL
Select 5 rn, 3 V from dual
)
MODEL
DIMENSION BY (rn)
MEASURES ( V, 0 c)
RULES (
c[MOD(rn, 2) != 0] = nvl(c[cv()-1],1)*V[cv()]
,c[MOD(rn, 2) = 0] = c[cv()-1] /V[cv()]
-- c[any] = nvl(c[cv()-1],1) *B_VOL[cv()]
) order by 1;
This is example of valid output:
| ROWNUM | V | C |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 2 | 0.5 |
| 3 | 4 | 2 |
| 4 | 2 | 1 |
| 5 | 3 | 3 |
But my query return this (incorrect output):
| ROWNUM | V | C |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 2 | 0.5 |
| 3 | 4 | 0 |
| 4 | 2 | 0 |
| 5 | 3 | 0 |
Please, help me fix my query.