2017-04-04 84 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