1个是工程id,
2是版本号version 1.0,2.0。。。
3是金额money;
现在要 分3列,显示,分别取最新三个版本的钱,如果没有最新版本。为空
显示结果如下;
--1分组排名,降序,(取最新版本为1);
SELECT RANK() OVER(PARTITION BY ID ORDER BY VERSION DESC) RAN,
ID,
VERSION,
MONEY
FROM MY_RANK
--2取最大的三个版本
SELECT * FROM (
SELECT RANK() OVER(PARTITION BY ID ORDER BY VERSION DESC) RAN,
ID,
VERSION,
MONEY
FROM MY_RANK ) WHERE RAN<4
--3分组
SELECT ID,DECODE(RAN,1,MONEY),DECODE(RAN,2,MONEY),DECODE(RAN,3,MONEY) FROM (
SELECT RANK() OVER(PARTITION BY ID ORDER BY VERSION DESC) RAN,
ID,
VERSION,
MONEY
FROM MY_RANK ) WHERE RAN<4
--4求和
SELECT ID,SUM(T1) MONEY1,SUM(T2) MONEY2,SUM(T3) MONEY3 FROM(
SELECT ID,DECODE(RAN,1,MONEY) T1,DECODE(RAN,2,MONEY) T2,DECODE(RAN,3,MONEY) T3 FROM (
SELECT RANK() OVER(PARTITION BY ID ORDER BY VERSION DESC) RAN,
ID,
VERSION,
MONEY
FROM MY_RANK ) WHERE RAN<4)
GROUP BY ID
以上按顺序 到最后一句就是结果了
比如数据:1,2,2,4,5,6.。。。。这是rank()的形式
1,2,2,3,4,5,。。。。这是dense_rank()的形式
1,2,3,4,5,6.。。。。。这是row_number()涵数形式