Для этого запроса:
select a.a, a.b
from [dbo].[test] a
where exists (select 1
from [dbo].[test] a2
where a.col1 = a2.col1 and
a.col2 > b.col2
);
Лучший индекс для test(col1, col2)
.
Я бы хотел написать это, используя row_number()
:
select a.*
from (select a.*,
row_number() over (partition by col1 order by col2) as seqnum
from dbo.test a
) a
where seqnum > 1;
Эта версия предполагает, что col2
уникален.Вы можете захотеть rank()
вместо row_number()
.