2017-04-04 94 views
1

選擇行我有價值觀與最大值保存不同的列

- id|type|Status|Comment 
- 1 | P | 1 | AAA 
- 2 | P | 2 | BBB 
- 3 | P | 3 | CCC 
- 4 | S | 1 | DDD 
- 5 | S | 2 | EEE 

我婉得到值爲每個類型,最大狀態,並從最大狀態的行註釋:

- id|type|Status|Comment 
- 3 | P | 3 | CCC 
- 5 | S | 2 | EEE 

所有SO上的現有問題不關心Max類型和Value的正確對應關係。

+0

您到目前爲止嘗試過什麼? – Nitish

+0

我試過像stackoverflow上20類似的帖子。沒有任何答案正確。顯然我不能寫我自己的東西 – fantomasdnb

+1

[Oracle:獲取組的最大值?]的可能重複(http://stackoverflow.com/questions/9220944/oracle-getting-maximum-value-of-a -group) – Nitish

回答

1

這給你每種類型一行,它具有最高地位

select * from (
    select your_table.*, row_number() over(partition by type order by Status desc) as rn from your_table 
) tt 
where rn = 1 
0

修正:下面將使用子查詢每種類型和最大狀態是什麼,然後將其加入該到弄清楚原始表並使用where子句僅選擇狀態等於最大狀態的那些行。值得注意的是,如果你有多個記錄具有相同的最大狀態,你會得到他們兩個來。

WITH T1 AS (SELECT type, MAX(STATUS) AS max_status FROM table_name GROUP BY type) 
SELECT t2.id, t2.type, t2.status, t2.comment 
FROM T1 LEFT JOIN table_name t2 ON t2.type= T1.type 
WHERE t2.status = T1.max_status 
+0

此處的子查詢將返回所有行,因爲id是唯一的,無法分組。爲什麼使用? – fantomasdnb

+0

這是我的錯誤。我修改了我的答案。 – SandPiper