Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Удалить дубликаты по нескольким полям  [new]
Badhabit
Member

Откуда:
Сообщений: 90
Подскажите как удалить из таблицы дубликаты по нескольким полям. Поиском нашел примеры где у строк есть id - это понятно, а если ИД нет?
те. есть таблица
fld1 fld2 fld3
1 2 3
1 2 5
1 5 3

ключеные поля fld1 и fld2
т.е. должны остаться строки...
1 2 3
1 5 3
т.е. из дубликатов оставлять например первую (хоят можно любую)
14 мар 17, 16:27    [20294329]     Ответить | Цитировать Сообщить модератору
 Re: Удалить дубликаты по нескольким полям  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Badhabit,

нумеруете и удаляете всё кроме 1... раз в неделю вопрос, гуглить удалить дубликаты
14 мар 17, 16:29    [20294344]     Ответить | Цитировать Сообщить модератору
 Re: Удалить дубликаты по нескольким полям  [new]
iap
Member

Откуда: Москва
Сообщений: 47045
WITH T(N) AS (SELECT ROW_NUMBER()OVER(PARTITION BY fld1,fld2 ORDER BY fld3) FROM [таблица])
DELETE T WHERE N>1;
14 мар 17, 16:34    [20294367]     Ответить | Цитировать Сообщить модератору
 Re: Удалить дубликаты по нескольким полям  [new]
Badhabit
Member

Откуда:
Сообщений: 90
iap, спасибо большое! теперь осталось понять что такое over(partition by...
14 мар 17, 17:21    [20294599]     Ответить | Цитировать Сообщить модератору
 Re: Удалить дубликаты по нескольким полям  [new]
Dmitry V. Liseev
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 5489
Badhabit
iap, спасибо большое! теперь осталось понять что такое over(partition by...
Что бы произнести слово "первую", Вы должны указать порядок сортировки. В таблицах SQL изначально нет сортировки. Там нет первой, второй и т.д. записей.

В данном случае записи с одинаковым fld1, fld2 будут отсортированы по возрастанию fld3 и пронумерованы. Все номера больше 1 будут удалены. То есть, для каждой группы дубликатов останется запись с наименьшим fld3.
14 мар 17, 18:30    [20294833]     Ответить | Цитировать Сообщить модератору
 Re: Удалить дубликаты по нескольким полям  [new]
Badhabit
Member

Откуда:
Сообщений: 90
Dmitry V. Liseev
Badhabit
iap, спасибо большое! теперь осталось понять что такое over(partition by...
Что бы произнести слово "первую", Вы должны указать порядок сортировки. В таблицах SQL изначально нет сортировки. Там нет первой, второй и т.д. записей.

В данном случае записи с одинаковым fld1, fld2 будут отсортированы по возрастанию fld3 и пронумерованы. Все номера больше 1 будут удалены. То есть, для каждой группы дубликатов останется запись с наименьшим fld3.

Спасибо!
14 мар 17, 18:47    [20294889]     Ответить | Цитировать Сообщить модератору
 Re: Удалить дубликаты по нескольким полям  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Dmitry V. Liseev,
автор
В данном случае записи с одинаковым fld1, fld2 будут отсортированы по возрастанию fld3 и пронумерованы. Все номера больше 1 будут удалены. То есть, для каждой группы дубликатов останется запись с наименьшим fld3.

витееватое объяснение сути окна :)
14 мар 17, 18:49    [20294898]     Ответить | Цитировать Сообщить модератору
 Re: Удалить дубликаты по нескольким полям  [new]
Кесарь
Member

Откуда:
Сообщений: 463
TaPaK
Dmitry V. Liseev,
витееватое объяснение сути окна :)


Наоборот очень понятное.
14 мар 17, 18:52    [20294906]     Ответить | Цитировать Сообщить модератору
 Re: Удалить дубликаты по нескольким полям  [new]
Badhabit
Member

Откуда:
Сообщений: 90
TaPaK
Dmitry V. Liseev,
автор
В данном случае записи с одинаковым fld1, fld2 будут отсортированы по возрастанию fld3 и пронумерованы. Все номера больше 1 будут удалены. То есть, для каждой группы дубликатов останется запись с наименьшим fld3.

витееватое объяснение сути окна :)

А Ваш вариант?..)
14 мар 17, 20:38    [20295174]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить