我有一个关于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