我有一个包含c1,c2,c3和c4列的表。我必须在具有相同c1和c2的记录中检索具有max(c3)的记录行,所以我这样写。
select *
from XXX a
where not exists (
select 1
from XXX b
where a.c1 = b.c1
and a.c2 = b.c2
and a.c3 > b.c3
)
但我的大四学生说这不高效,因为查询将全面扫描表两次。处理上述情况的更好方法是什么?
备注:我使用的是Oracle 11g。
示例输入:
c1 c2 c3 c4
1 1 1 a
1 1 2 b
1 1 3 c
2 1 1 d
2 1 2 e
结果:
c1 c2 c3 c4
1 1 3 c
2 1 2 e
答案 0 :(得分:1)
请尝试:
select c1,
c2,
c3,
c4
From(
select
XXX.*,
row_number() over (partition by c1 order by c3 desc) RNum
from XXX
)x where Rnum=1
答案 1 :(得分:0)
试试这个:
SELECT MAX(c3) FROM XXX
WHERE c1=c2
答案 2 :(得分:0)
我没有得到你的问题。但我仍然明白你想找到一个更好的方法来找到Max c3列。请试试这个 -
Select Max(c3) from XXXa,XXXb where a.c1 = b.c1
答案 3 :(得分:0)
尝试:
select max(c3)
from table_name
where c1=c2;
答案 4 :(得分:0)
你可以通过使用......来做一个小组。
SELECT C1, C2, C3, 最大(C3)FROM XXX GROUP BY C1, C2, C3具有最大值(C3)= C3
我没有在Oracle上运行它,但我认为这是实现它的方法。
希望这有帮助。