Вы можете поместить свой запрос в CTE и использовать функцию row_number () , чтобы выяснить, какие строки следует извлечь.
Примерно так:
with C as
(
Select a,b,c,
row_number() over(partition by a, b order by SomeColumn) as rn
from TABLE_NAME
--(COMPLEX_INNER JOIN LOGIC)
)
select a, b, c
from C
where rn = 1
Рабочий пример:
declare @T table
(
a int,
b int,
c int
)
insert into @T values
(1, 1, 1),
(1, 1, 2),
(2, 2, 1),
(2, 2, 2)
;with C as
(
select a, b, c,
row_number() over(partition by a, b order by c) as rn
from @T
)
select a, b, c
from C
where rn = 1
Результат:
a b c
----------- ----------- -----------
1 1 1
2 2 1