SQL для поиска повторяющихся записей (в пределах группы)SQL для поиска повторяющихся записей (в пределах группы)
У меня есть небольшая проблема, и я не уверен, что будет лучшим способом, чтобы исправить это, как я имеют ограниченный доступ к самой базе данных (Oracle). В нашей таблице «СОБЫТИЕ» у нас есть около 160 тыс. Записей, каждый EVENT имеет GROUPID, а нормальная запись имеет ровно 5 строк с одним и тем же GROUPID. Из-за ошибки в настоящее время мы получаем пару дубликатов записей (дублируем, поэтому 10 строк вместо 5, просто разные EVENTID. Это может измениться, так что это всего лишь <> 5). Нам нужно отфильтровать все записи этих групп.
Из-за ограниченного доступа к базе данных мы не можем использовать временную таблицу, и мы не можем добавить индекс в столбец GROUPID, чтобы сделать его быстрее.
Мы можем получить GROUPIDs с этим запросом, но нам потребуется второй запрос, чтобы получить необходимые данные
select A."GROUPID"
from "EVENT" A
group by A."GROUPID"
having count(A."GROUPID") <> 5
Одним из решений было бы подвыбор:
select *
from "EVENT" A
where A."GROUPID" IN (
select B."GROUPID"
from "EVENT" B
group by B."GROUPID"
having count(B."GROUPID") <> 5
)
Без индекса GROUPID и 160k записей, это занимает слишком много времени. Пробовал думать о соединении, которое может справиться с этим, но пока не может найти хорошего решения.
Любой может найти подходящее решение для этого, может быть?
Small edit: У нас нет 100% дубликатов здесь, так как каждая запись по-прежнему имеет уникальный идентификатор, а GROUPID также не является уникальным (поэтому нам нужно использовать «группу за») - или, может быть, я просто пропустите простое решение для этого :)
небольшой пример о данных (я не хочу, чтобы удалить его, просто найти его)
EVENTID | GROUPID | TYPEID
123456 123 12
123457 123 145
123458 123 2612
123459 123 41
123460 123 238
234567 123 12
234568 123 145
234569 123 2612
234570 123 41
234571 123 238
он имеет еще несколько столбцов, как метка времени и т.д., но, как вы можете видеть уже, все равно, кроме EVENTID.
Мы будем запускать его чаще всего для тестирования, чтобы найти ошибку и проверить, если это произойдет снова.
Можете ли вы привести пример группы с дубликатами и отметьте, какие строки должны быть удалены ? – Constantin 2008-10-08 13:08:00