熟悉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