Я думаю not exists
делает то, что вы хотите. Предполагая, что symbol
принимает только значения '+'
и '-'
:
select t.*
from myTable t
where not exists (select 1
from myTable t2
where t2.no = t.no and t2.date = t.date and
t2.value = t.value and
t2.value2 = t.value2 and
t2.provision = t.provision and
t2.symbol <> t.symbol
);
Если symbol
может принимать другие значения, добавьте условие t2.symbol in ('+', '-') and t.symbol in ('+', '-')
.
Вы также можете подойти к этому с помощью оконных функций. Предполагая, что символ является либо +
, либо -
, и дублируется не более двух строк:
select t.*
from (select t.*,
min(symbol) over (partition by no, date, value, value2, provision) as min_symbol,
min(symbol) over (partition by no, date, value, value2, provision) as max_symbol
from mytable t
) t
where min_symbol <> max_symbol;