如何获取没有单个最大值行的行

How to get rows without single max value row

我在 Oracle SQL 中有 table。 Table 包含不同对象的不同值,我需要 select 除了最大值按对象分组的每条记录,但最大值可以在下面的 table 中有重复记录。我需要使用解析函数。

object value
obj1   100
obj1   100
obj1   50
obj1   50
obj2   30
obj2   10
obj2   10

所以我需要除了每组最大值的单个记录之外的所有记录。例如上面我的 SQL 查询结果必须是

object value
obj1   100
obj1   50
obj1   50
obj2   10
obj2   10

正如您所看到的,结果包含除了每个对象具有最大值的两条记录之外的所有记录,但结果包含最大值的重复记录。

我试过这样的东西

SELECT * 
FROM (SELECT object, value, max(value) OVER (PARTITION BY object) as maxval FROM table)
WHERE value != maxval

但是这个查询 returns 具有最大值的重复记录。有没有尽可能少子查询的解决方案?

So I need all records except single record with max value for each group.

您可以使用 window 函数:

select object, value
from (select t.*,
             row_number() over (partition by object, value order by value) as seqnum_ov,
             max(value) over (partition by object) as max_value
      from t
     ) t
where max_value <> value or seqnum_ov > 1