有三次考试成绩,想看每次成绩照上次是进步还是退步,这怎么搞,我已经用了很多种方法,还是没整明白
小明 78 第一次考试
小明 98 第二次考试
小明 67 第三次考试
第一次考试不存在什么进步退步。
使用lag 窗口函数
lag(分数,1,分数) over(partition by 名字 order by 考试次数) 如果没有考试次数这个字段,可以用一个自增字段,考了一次试,自增一下。
小明 78 78
小明 98 78
小明 67 98
将两列成绩进行比较,如果左边高于右边那就是进步了,如果低于右边就是退步了。可以过滤掉第一次考试的情况。只将后两次考试的成绩进行情况比较。
SELECT
NAME,
MAX(DECODE(time,2,score,0)) - MAX(DECODE(time,1,score,0)) TIME1,
MAX(DECODE(time,3,score,0)) - MAX(DECODE(time,2,score,0)) TIME2
FROM
A
GROUP BY
NAME
;
2.由A到C
SELECT
A.*,
A.SCORE - NVL(B.SCORE,A.SCORE) CONTRAST
FROM
A
LEFT JOIN A B ON A.NAME = B.NAME AND A.TIME - 1 = B.TIME
;