如何获取没有单个最大值行的行
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
我在 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