选择具有最大值保存不同列的行

时间:2017-04-04 13:15:51

标签: sql oracle

我有值

 - 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类型和值的正确对应。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

已更正:下面将使用子查询来确定每种类型以及最大状态,然后将其连接到原始表并使用where子句仅选择那些行status等于最大状态。值得注意的是,如果你有多个具有相同最大状态的记录,你将会得到它们两个。

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