2016-02-25 82 views
2

在Oracle中,如何選擇列在第三列中分組的列中最大值的列?一個例子是最簡單的可能(我已經簡單化下來的例子):在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 

換句話說,我希望輸出爲主要爲鏡子,我的表,但我需要各行的顏色,從該行的顏色相匹配該組內最大的一年。

+0

我對格式道歉,我只是累了。 –

回答

1

甲骨文設置

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 
+0

非常感謝!這個快速回答確實幫助我找到了相當複雜的東西。 –

相關問題