我有一個關於oracle sql的簡單問題。所以我有這個表在ORACLE SQL中向後查詢數據
WEEKNUM DATA
1 10
2 4
3 6
4 7
所以我想做出一個觀點,即這樣表示,
WEEKNUM DATA ACCUM_DATE
1 10 10
2 4 14
3 6 20
4 7 27
我花時間在這簡單的一個,但不可能得到任何運氣
非常感謝
我有一個關於oracle sql的簡單問題。所以我有這個表在ORACLE SQL中向後查詢數據
WEEKNUM DATA
1 10
2 4
3 6
4 7
所以我想做出一個觀點,即這樣表示,
WEEKNUM DATA ACCUM_DATE
1 10 10
2 4 14
3 6 20
4 7 27
我花時間在這簡單的一個,但不可能得到任何運氣
非常感謝
SELECT weeknum,
data,
sum(data) over (order by weeknum) accum_data
FROM your_table_name
應該工作。我在此處使用sum
分析函數,並假設您希望以最小的weeknum
值開始並隨着weeknum
值的增加繼續增加運行總數。我還假設你永遠不想重置累計總和。如果您正在嘗試執行類似於每年重新啓動的累計和的操作,則需要將partition by
添加到分析功能中。
你可以在這種情況下使用Cross JOin
查詢:
select
A.WEEKNUM
, A.DATA
, SUM(B.DATA) DA
from table1 A
cross join table1 B
WHERE A.WEEKNUM>=B.WeekNUM
GROUP BY A.WEEKNUM
, A.DATA
order by A.WEEKNUM
結果:
WEEKNUM DATA DA
1 10 10
2 4 14
3 6 20
4 7 27
謝謝你們,但我只是發現了這種方法效果很好,
OVER (ORDER BY WEEKNUM ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS CUMULATIVE_WEIGHT
或使用子選擇來計算:
select WEEKNUM, DATA, (select sum(DATA) from tablename t2
where t2.weeknum <= t1.weeknum) as ACCUM_DATE
from tablename t1