[英]Querying Data Backward in 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
值开始,并随着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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.