Я задал вопрос, похожий на этот здесь , и мне были даны отличные ответы, но оказалось, что следующим образом это нужно сделать. Я работаю над этим уже несколько часов и не смог добиться слишком большого прогресса.
Как удалить дубликаты из таблицы, настроенной следующим образом?
unique_ID | worker_ID | date | type_ID
Работник может иметь несколько идентификаторов type_ID, связанных с ними. Я хочу удалить при следующих условиях:
- Дубликаты типов для работника, у которых все типы имеют одинаковую дату -
Удалить все записи типа, кроме одной
- Дубликаты типов для работника, где один тип имеет дату, а другой -
имеет нулевое значение - Удаляет запись типа / записи с нулевым значением
- Дубликаты типов для работника, где оба имеют нулевые значения даты -
Удалить все записи типа, кроме одной
Номер 2 - единственная проблема, с которой у меня проблема. Я думаю, у меня есть 1 и 3 работающие.
Мой код для номера 1 за запрос.
Delete from TABLENAME
WHERE unique_ID IN
(
SELECT MAX(unique_ID)
FROM TABLENAME
GROUP BY worker_ID, type_ID, date
HAVING COUNT(*) > 1
AND date IS NOT NULL
)
Я полагал, что номер три должен быть небольшим изменением кода, используемого для номера 1.
ОБНОВЛЕНИЕ (12/8/2011) - Решение, которое я придумал для условия 2
select
unique_ID,
worker_ID,
type_ID
into #validActive
from
#tbl
where date is not null
select
unique_ID,
worker_ID,
type_ID
into #nullActive
from #tbl
where date is null
Delete from #tbl where unique_ID in
(
select #nullActive.unique_ID from #validActive join #nullActive on #validActive.worker_ID = #nullActive.worker_ID
where (#validActive.worker_ID = #nullActive.worker_ID and #validActive.type_ID = #nullActive.type_ID)
)
Демонстрация решения