我有一个包含列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
用相同的C1和C2手段C1 = C2吧? – TechDo
给出样本输入和输出可能有助于清除问题 – hkutluay
您能澄清为什么在表上使用自连接吗?你能否用一些输出清楚地解释这个问题? – user1658435