2012-03-28 2 views
0

This question делает в значительной степени то, что я хочу выполнить, но моя таблица сложнее и не имеет первичного ключа. Я также не совсем понимаю верхний ответ, что означают значения t1 и t2. Если этот ответ может быть применим ко мне, было бы признательно, если бы кто-то объяснил код.Сохраните первый дубликат записей и удалите остальные

У меня есть несколько месяцев таблиц, содержащих информацию о клиентах и ​​их политике. У каждого клиента есть уникальный идентификатор политики, но у них может быть несколько политик, что приводит к нескольким записям с одинаковым идентификатором политики. Дублированные записи могут быть совершенно разными или точно одинаковыми в каждом поле.

Для моих целей, Я хочу сохранить только одну запись для каждого идентификатора политики. В идеальном случае запись сохраняется с наивысшим возрастом, но не нужно, если это слишком сложно. Обратите внимание, что может быть более одной записи с возрастом, максимальным для этого конкретного идентификатора политики, тогда не имеет значения, какой из них мы сохраняем.

Я не планирую создавать первичный ключ, потому что есть некоторые случаи, когда я буду хранить две записи под одним и тем же идентификатором политики, который я сам внесу внесение в код. Я также не хочу создавать другую таблицу, потому что я работаю с 10 + таблицами. Кто-то предложил использовать first(), но я не уверен, как включить его в запрос.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, и благодарим за вашу помощь заранее!

========= UPDATE # 1

Хорошо, похоже, что мой вопрос был немного нереально, так что я буду добавлять Autonumber первичного ключа. Как я продолжу это?

+2

Вы действительно должны рассмотреть вопрос о добавлении первичного ключа, как это делает идентификацию одной записи намного проще и поможет вам удалить Dups. Примечание, имеющее первичный ключ, не означает, что у вас еще нет дубликатов. –

+0

Я думаю, что вы собираетесь что-то придать. Либо вам нужно будет создать новую таблицу, либо вам придется добавить уникальный ключ. – Fionnuala

ответ

3

Что-то на этих линиях:

DELETE Policies.* 
FROM Policies 
WHERE Policies.ID Not In (
    SELECT TOP 1 id 
    FROM policies p 
    WHERE p.policyid = policies.policyid 
    ORDER BY createdate DESC, id) 
+1

Я попробовал самостоятельно запустить инструкцию SELECT' и попросил меня ввести значение параметра 'Policies.PolicyID'. Могу ли я просто подтвердить, что я правильно понимаю ваш код? ID = первичный ключ автозапуска; Политики = таблица; P = таблица политик. Разве вторая вторая строка не будет истинна? Кроме того, внутренний кронштейн выводит только одну запись. – Emily

+1

Идея использует два идентификатора, идентификатор политики, упомянутый в тексте, который можно дублировать, и идентификатор, который является новым номером autonumber. Внутренняя скобка выводит по одной записи на один идентификатор политики, и это то, что вы хотите получить. Я тестировал образец таблицы. – Fionnuala

+1

Ого, хорошо, мои извинения, я просто понял код. Я выполнил пробный запуск на одной из моих таблиц с 30 тыс. Записей. Кажется, это сработало! Так что спасибо тебе! Но последнее, однако, потребовалось довольно много времени для запуска - это нормально? Я просто волнуюсь, потому что одна из моих таблиц имеет записи в 900 000. – Emily