необходимо найти счета, которые имеют одинаковые номер счета, дату и сумму, но разные ID.
Использование exists
:
select t.*
from t
where exists (select 1
from t t2
where t2.Invoice = t.invoice and
t2.Date = t.date and
t2.amount = t.amount and
t2.id <> t.id
)
order by t.invoiceNo, t.date, t.amount, t.id;
Это покажетсопоставление накладных на соседних строках. Для производительности вам нужен индекс на (invoice, date, amount, id)
.
Если вы просто хотите, чтобы там происходили триплеты, вы можете использовать агрегацию:
select invoice, date, amount, min(id), max(id)
from t
group by invoice, date, amount
having count(distinct id) > 1;
Примечание: Если имеется более двух дубликатов, это показывает только два идентификатора.