我需要两列A和B,但是A和A有重复的值,B有唯一的值。我必须只获取具有max(C)值的A值。 C是另一栏。
答案 0 :(得分:2)
您可以使用ROW_NUMBER。
<强> ROW_NUMBER 强>
返回结果分区中行的序号 设置,从1开始,每个分区的第一行。
PARTITION BY value_expression
除以生成的结果集 FROM子句到ROW_NUMBER函数所在的分区 应用。 value_expression指定结果集的列 被分区了。如果未指定PARTITION BY,则该函数处理 查询结果的所有行都设置为单个组。
ORDER BY
ORDER BY子句确定在指定的行中为其分配唯一ROW_NUMBER的行的顺序 划分。这是必需的。
您案例中ROW_NUMBER
的示例:
SELECT A, B
FROM
(
SELECT ROW_NUMBER() OVER(PARTITION BY A ORDER BY C DESC) AS RowNum, A, B, C
FROM TableName
)
WHERE RowNum = 1
答案 1 :(得分:1)
使用Row_Number
分析功能执行此操作
select A,B
from
(
select row_number() over(partition by A order by C desc)rn,A,B,C
from yourtable
)
where RN=1
答案 2 :(得分:1)
@ NoDisplayName解决方案的替代方案是使用keep dense_rank first / last:
with your_table as (select 1 a, 3 b, 10 c from dual union all
select 1 a, 2 b, 20 c from dual union all
select 1 a, 1 b, 30 c from dual union all
select 2 a, 4 b, 40 c from dual union all
select 2 a, 5 b, 60 c from dual union all
select 2 a, 3 b, 60 c from dual union all
select 3 a, 6 b, 70 c from dual union all
select 4 a, 2 b, 80 c from dual)
select a,
max(b) keep (dense_rank first order by c desc) b,
max(c) max_c
from your_table
group by a;
A B MAX_C
---------- ---------- ----------
1 1 30
2 5 60
3 6 70
4 2 80
答案 3 :(得分:0)
使用INTERSECT
关键字获取ColA最大值为ColC的行。
select ColA, ColB from
(
select ColA, ColB, max(colC) from Tabl
group by ColA, ColB
intersect
select ColA, ColB, ColC from Tabl
) as A