在Oracle中,如何选择在第三列分组的列中该行具有最大值的列?一个例子可能是最简单的(我为这个例子愚蠢了):
id | year | color | groupID | typeID | personID
---+------+--------+---------+--------+---------
1 | 2010 | red | 10 | 3 | 1
2 | 2011 | yellow | 10 | 15 | 1
3 | 2012 | blue | 10 | 12 | 2
4 | 2009 | green | 25 | 6 | 2
5 | 2010 | purple | 25 | 17 | 2
6 | 2011 | orange | 25 | 22 | 3
我希望每个输出行都具有按组ID分组的颜色以及该组的最大年份值。
我想看到的是这样的输出:
1 | 2010 | blue | 10 | 3 | 1
2 | 2011 | blue | 10 | 15 | 1
3 | 2012 | blue | 10 | 12 | 2
4 | 2009 | orange | 25 | 6 | 2
5 | 2010 | orange | 25 | 17 | 2
6 | 2011 | orange | 25 | 22 | 3
换句话说,我希望输出大部分镜像我的表,但是我需要使每行颜色与该组中最大年份的行中的颜色相匹配。
Oracle安装程序:
CREATE TABLE table_name ( id,year,color,groupID,typeID,personID) AS
SELECT 1,2010,'red',10,3,1 FROM DUAL UNION ALL
SELECT 2,2011,'yellow',10,15,1 FROM DUAL UNION ALL
SELECT 3,2012,'blue',10,12,2 FROM DUAL UNION ALL
SELECT 4,2009,'green',25,6,2 FROM DUAL UNION ALL
SELECT 5,2010,'purple',25,17,2 FROM DUAL UNION ALL
SELECT 6,2011,'orange',25,22,3 FROM DUAL;
查询:
SELECT id,
year,
MAX( color ) KEEP ( DENSE_RANK LAST ORDER BY year )
OVER ( PARTITION BY groupID ) AS color,
groupId,
typeId,
personId
FROM table_name;
输出:
ID YEAR COLOR GROUPID TYPEID PERSONID
---------- ---------- ------ ---------- ---------- ----------
1 2010 blue 10 3 1
2 2011 blue 10 15 1
3 2012 blue 10 12 2
4 2009 orange 25 6 2
5 2010 orange 25 17 2
6 2011 orange 25 22 3
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句