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

Откуда:
Сообщений: 255
Добрый день,
Есть база, в ней таблицы. Есть дублирующие записи.
В тех таблицах где можно было идентифицировать дубли по одной записи,я удалял дубли так:
WITH CTE AS (SELECT CLASSIFIED, ROW_NUMBER() OVER(PARTITION BY CLASSIFIED ORDER BY CLASSIFIED) rnk FROM [BASE_ACC]) DELETE FROM CTE WHERE rnk > 1;


Так всё хорошо, но есть таблица,структура такая:
acc - varchar(20)
date - datetime
и остальные поля,но они на данный момент не важны.
т.е. есть дубликаты где дублируются счета по датам.
Как в этом случае удалить лишние дубли?Совсем голова не варит.
пример
40817810147784123456 - 01.01.2000...
40820810147784123420 - 04.05.1998...
40817810147784123456 - 01.01.2000 ..
т.е. должны остаться так:
40817810147784123456 - 01.01.2000...
40820810147784123420 - 04.05.1998...
11 авг 13, 21:42    [14694064]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов в базе  [new]
denis_stell
Member

Откуда:
Сообщений: 255
нужен вариант без создания временных таблиц,переносом в нужную и удаления
11 авг 13, 21:44    [14694069]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов в базе  [new]
Empirical
Member

Откуда:
Сообщений: 99
denis_stell,

1. группировка, top 1 оставить, остальные удалить
2. удалить row_number > 1
11 авг 13, 21:47    [14694076]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов в базе  [new]
qwerty112
Guest
denis_stell
Так всё хорошо, но есть таблица,структура такая:
acc - varchar(20)
date - datetime
и остальные поля,но они на данный момент не важны.
т.е. есть дубликаты где дублируются счета по датам.
Как в этом случае удалить лишние дубли?
...

КО докладует :
- PARTITION BY можно делать по 2-м по нескольким полям
11 авг 13, 21:49    [14694080]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов в базе  [new]
denis_stell
Member

Откуда:
Сообщений: 255
qwerty112
denis_stell
Так всё хорошо, но есть таблица,структура такая:
acc - varchar(20)
date - datetime
и остальные поля,но они на данный момент не важны.
т.е. есть дубликаты где дублируются счета по датам.
Как в этом случае удалить лишние дубли?
...

КО докладует :
- PARTITION BY можно делать по 2-м по нескольким полям



не знал,спасибо.
т.е. вот так:
WITH CTE AS (SELECT ACC_CODE, ROW_NUMBER() OVER(PARTITION BY ACC_CODE,DDATE ORDER BY ACC_CODE) rnk FROM [BASE_BL]) DELETE FROM CTE WHERE rnk > 1;

?
11 авг 13, 22:45    [14694169]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов в базе  [new]
Empirical
Member

Откуда:
Сообщений: 99
denis_stell
PARTITION BY ACC_CODE,DDATE ORDER BY ACC_CODE, DDATE

?
11 авг 13, 23:34    [14694273]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов в базе  [new]
denis_stell
Member

Откуда:
Сообщений: 255
Empirical,
спасибо
12 авг 13, 00:01    [14694329]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов в базе  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
denis_stell,

а зачем в SELECTе ACC_CODE?
12 авг 13, 09:26    [14694874]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов в базе  [new]
denis_stell
Member

Откуда:
Сообщений: 255
iap,

селект по ключевому полю,т.е. выбор по нему, конечно можно поставить select *,row_number()...
12 авг 13, 14:47    [14697053]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов в базе  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
denis_stell
iap,

селект по ключевому полю,т.е. выбор по нему, конечно можно поставить select *,row_number()...
Нет, можно короче:
WITH CTE(rnk) AS (SELECT ROW_NUMBER() OVER(PARTITION BY ACC_CODE,DDATE ORDER BY ACC_CODE) FROM [BASE_BL])
DELETE CTE WHERE rnk > 1;
Но это непринципиально.
Просто было интересно, зачем там поле, которое нигде не используется.
Может, Вы ему придаёте какое-то особое значение?
12 авг 13, 14:51    [14697073]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов в базе  [new]
denis_stell
Member

Откуда:
Сообщений: 255
iap,

да нет,просто оно ключевое
12 авг 13, 20:15    [14698825]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов в базе  [new]
denis_stell
Member

Откуда:
Сообщений: 255
поэтому и включил в селект
12 авг 13, 20:16    [14698826]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить