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

Откуда: Белгород
Сообщений: 458
Подскажите пожалуйста, как Удалить N-1 запись в одной таблице по нескольким ключевым полям

если выполняется

select count(*), key, date from table
group by key, date having count(*) > 1

тогда нужно удалить N-1 такую запись


подскажите, как ?

никак не идут мысли в голову ((( пытаюсь перебираю способы в условии delete...
5 окт 15, 12:26    [18235701]     Ответить | Цитировать Сообщить модератору
 Re: Удалить N-1 запись в одной таблице по нескольким ключевым полям  [new]
Glory
Member

Откуда:
Сообщений: 104760
Алексей Кр
пытаюсь перебираю способы в условии delete...

Пронумеровать внутри группы. И потом удалить
5 окт 15, 12:28    [18235721]     Ответить | Цитировать Сообщить модератору
 Re: Удалить N-1 запись в одной таблице по нескольким ключевым полям  [new]
Макбет
Member

Откуда:
Сообщений: 72
Алексей Кр,

with q as (select row_number() over(partition by "список полей группировки" order by Cod) rn from MyTable)

delete from q where rn>1
5 окт 15, 12:31    [18235733]     Ответить | Цитировать Сообщить модератору
 Re: Удалить N-1 запись в одной таблице по нескольким ключевым полям  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
WITH CTE AS(SELECT N=ROW_NUMBER()OVER(PARTITION BY key, [date] ORDER BY (SELECT 0)) FROM [table])
DELETE CTE WHERE N>1;
Но хорошо подумайте, какие именно записи надо удалять.
И замените (SELECT 0) на то, что на самом деле надо.
5 окт 15, 12:32    [18235734]     Ответить | Цитировать Сообщить модератору
 Re: Удалить N-1 запись в одной таблице по нескольким ключевым полям  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
iap
WITH CTE AS(SELECT N=ROW_NUMBER()OVER(PARTITION BY key, [date] ORDER BY (SELECT 0)) FROM [table])
DELETE CTE WHERE N>1;
Но хорошо подумайте, какие именно записи надо удалять.
И замените (SELECT 0) на то, что на самом деле надо.


Да тут, похоже, просто идентичные дубликаты.
5 окт 15, 14:14    [18236450]     Ответить | Цитировать Сообщить модератору
 Re: Удалить N-1 запись в одной таблице по нескольким ключевым полям  [new]
SvElena
Member

Откуда:
Сообщений: 21
Скажите в таблиц есть какое-нибудь уникальное поле?
5 окт 15, 16:35    [18237309]     Ответить | Цитировать Сообщить модератору
 Re: Удалить N-1 запись в одной таблице по нескольким ключевым полям  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4248
Алексей Кр

select count(*), key, date from table
group by key, date having count(*) > 1

тогда нужно удалить N-1 такую запись


Вначале определитесь для себя чем запись N отличается от записи N-1 ?
5 окт 15, 17:09    [18237465]     Ответить | Цитировать Сообщить модератору
 Re: Удалить N-1 запись в одной таблице по нескольким ключевым полям  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4248
Алексей Кр
тогда нужно удалить N-1 такую запись

А вы, случайно, не хотите ли удалить дубликаты этих записей? ;)))
5 окт 15, 17:15    [18237491]     Ответить | Цитировать Сообщить модератору
 Re: Удалить N-1 запись в одной таблице по нескольким ключевым полям  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
a_voronin
iap
WITH CTE AS(SELECT N=ROW_NUMBER()OVER(PARTITION BY key, [date] ORDER BY (SELECT 0)) FROM [table])
DELETE CTE WHERE N>1;

Но хорошо подумайте, какие именно записи надо удалять.
И замените (SELECT 0) на то, что на самом деле надо.


Да тут, похоже, просто идентичные дубликаты.
По двум полям.
Но есть же и другие
5 окт 15, 17:25    [18237533]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить