当前位置: 代码迷 >> Oracle开发 >> oracle 窗口函数的统计使用有关问题
  详细解决方案

oracle 窗口函数的统计使用有关问题

热度:26   发布时间:2016-04-24 07:31:38.0
oracle 窗口函数的统计使用问题
熟悉oracle窗口函数的,下面两题应该还是挺简单,我就是写出来的语句有问题,
如何利用oracle自有的窗口函数实现当前行的某个减去上一行的值啊,例如
rownum || name|| age || sal  
1 || A1 || 22 || 100
2 || A2 || 24 || 120
3 || A3 || 23 || 150
4 || A3 || 25 || 230

统计的结果我想得到 

rownum || name|| age || sal || 统计结果
1 || A1 || 22 || 100 || 100
2 || A2 || 24 || 120 || 20
3 || A3 || 23 || 150 || 30
4 || A3 || 25 || 230 || 80 


2.如何用函数十二个月的的日期函数,根据statdate字段,实时统计以它为基准的过去十二个月中sal字段的累积和,对于前十二个月的累积数,只需要累积到第一个月就行,
statdat code A1 sal
2009-1-31 0104 0 3
2009-2-28 0104 0 3
2009-3-31 0104 0 3
2009-4-30 0104 0 3
2009-5-31 0104 0 4
2009-6-30 0104 0 4
2009-7-31 0104 0 4
2009-8-31 0104 0 4
2009-9-30 0104 0 5
2009-10-31 0104 0 5
2009-11-30 0104 0 5
2009-12-31 0104 0 5
2010-1-31 0104 0 0
2010-2-28 0104 0 0
2010-3-31 0104 0 0
2010-4-30 0104 0 1
2010-5-31 0104 0 1


------解决方案--------------------
SQL code
第二题:select t.*,       sum(sal) over(order by statdate rows 12 preceding) "前十二个月和"  from test_kpi_busi_claim_mon tSTATDATE    RISKCODE A1 SAL       前十二个月和----------- -------- -- --- ------------2009-1-31   0104     0    3            32009-2-28   0104     0    3            62009-3-31   0104     0    3            92009-4-30   0104     0    3           122009-5-31   0104     0    4           162009-6-30   0104     0    4           202009-7-31   0104     0    4           242009-8-31   0104     0    4           282009-9-30   0104     0    5           332009-10-31  0104     0    5           382009-11-30  0104     0    5           432009-12-31  0104     0    5           482010-1-31   0104     0    0           482010-2-28   0104     0    0           452010-3-31   0104     0    0           422010-4-30   0104     0    1           402010-5-31   0104     0    1           382010-6-30   0104     0    1           352010-7-31   0104     0    1           322010-8-31   0104     0    1           29 STATDATE    RISKCODE A1 SAL       前十二个月和----------- -------- -- --- ------------2010-9-30   0104     0    1           262010-10-31  0104     0    2           232010-11-30  0104     0    2           202010-12-31  0104     0    3           182011-1-31   0104     0    0           132011-2-28   0104     0    0           132011-3-31   0104     0    0           132011-4-30   0104     0    0           132011-5-31   0104     0    0           122011-6-30   0104     0    0           112011-7-31   0104     0    6           162011-8-31   0104     0    6           212011-9-30   0104     0    6           262011-10-31  0104     0    6           312011-11-30  0104     0    6           352011-12-31  0104     0    9           422012-1-31   0104     0    0           39 37 rows selected
  相关解决方案