Поиск дубликата записей в таблице SQL
Есть таблица с несколькими полями. Есть список id, к которым нужно найти дубликаты по 3 полям (поле 1, поле 2, поле 3).
Например, у меня есть id 1 - соответственно запрос должен вернуть id 5 и id 10 (совпадают первые 3 поля);для id 3 вернет id 7 (также совпадают 3 поля), для остальных id ничего не вернет (нет совпадений по 3 полям).
Не могу составить запрос, который вывод бы только дубликаты (или исходная строка + дубликат) на основе id, прошу помочь.
Все дубликаты в таблице выводить умею, количество считаю тоже, а вот дубликаты к конкретным записям не могу найти.
Естественно, "боевая" таблица в разы больше :) Нужно понять принцип.
Ответы (2 шт):
Используйте оконные функции.
With data as (
Select
*,
row_number() over (partition by [Поле1],[Поле2],[Поле3] order by id) as rowNumber
from table
)
Select
*
from data
where
rowNumber > 1
Пример с rank фильтровать id
With data as (
Select
*,
row_number() over (partition by [Поле1],[Поле2],[Поле3] order by id) as rowNumber,
Rank() over (partition by [Поле1],[Поле2],[Поле3] order by id) as rowRank
from table
)
Select
*
from data
Inner join data as data1
On data.rowRank = data1.rowRank and data.id <> data1.id
where
Data1.rowNumber > 1 and data.id in (надо указать список id который нужно отфильтровать)
select * from table where id not in
(select max(id) id from table group by поле1, поле2, поле3 having count(*)=1)
