如下表,其中的流水号是按累加值的大小在某个类别中由小至大排列,差值=后一个流水号的累加值—前一个流水号的累加值,现在求一个SQL语句来求差值(最好是一句SQL语句来实现)
序号----类别----流水号----累加值----差值
---------- ------------------------- ---------- ---------- ----------
1 -----A0001 ----1 --------100
2-----A0001 ----2 --------120
3 -----A0001 ----3 --------150
---------- ------------------------- ---------- ---------- ----------
99 -----A0002----1 --------50
100----A0002 ----2 --------60
101 -----A0002 ----3 --------90
---------- ------------------------- ---------- ---------- ----------
256 -----A0003 ----1 --------210
257 -----A0003 ----2 --------270
258-----A0003 -----3-------280
---------- ------------------------- ---------- ---------- ----------
300 -----A0004 ----1 --------70
301 -----A0004 ----2 --------120
302-----A0004 ----3--------150 结果 序号----类别----流水号----累加值----差值
---------- ------------------------- ---------- ---------- ----------
1 -----A0001 ----1 --------100 --------20
2-----A0001 ----2 --------120--------30
3 -----A0001 ----3 --------150 --------
---------- ------------------------- ---------- ---------- ----------
99 -----A0002----1 --------50 --------10
100----A0002 ----2 --------60--------30
101 -----A0002 ----3 --------90--------
---------- ------------------------- ---------- ---------- ----------
256 -----A0003 ----1 --------210 --------60
257 -----A0003 ----2 --------270-------- 10
258-----A0003 -----3-------280--------
---------- ------------------------- ---------- ---------- ----------
300 -----A0004 ----1 --------70 --------50
301 -----A0004 ----2 --------120 --------30
302-----A0004 ----3--------150 --------
此问题有点类似下一行减去上一行,但是此问题是在一个小类别里按流水号的大小下一行减去上一行。
LAG(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal
FROM employees
WHERE job_id = ’PU_CLERK’;
LAST_NAME HIRE_DATE SALARY PREV_SAL
------------------------- --------- ---------- ----------
Khoo 18-MAY-95 3100 0
Tobias 24-JUL-97 2800 3100
Baida 24-DEC-97 2900 2800
Himuro 15-NOV-98 2600 2900
Colmenares 10-AUG-99 2500 2600
from table_name
-------------------------------------------
来慢了 :(