|
Удаление дублей строк | ☑ | ||
---|---|---|---|---|
0
Начинающий Восьмерочн
21.07.17
✎
17:01
|
Пытаюсь написать запрос как удалить некий массив строк, на самом деле удаление дублей, никак не могу связать 2 части запроса, там где то INNER JOIN где то должен быть, как сделать подобное ?
DELETE FROM [dbo].[_InfoRgSL21137] (SELECT [_Fld21123RRef],[_Fld21124RRef],[_Fld21125RRef], SUM(1) FROM [dbo].[_InfoRgSL21137] GROUP BY [_Fld21123RRef],[_Fld21124RRef],[_Fld21125RRef] HAVING SUM(1)>1) |
|||
1
Ёпрст
21.07.17
✎
17:04
|
там где-то where потерялся
|
|||
2
Ёпрст
21.07.17
✎
17:04
|
ну проще писать having count()>1
|
|||
3
Ёпрст
21.07.17
✎
17:05
|
заместо sum(1)
|
|||
4
Ёпрст
21.07.17
✎
17:06
|
Ну и таким запросом, ты удалишь все записи, а не только "дубли"
|
|||
5
Ёпрст
21.07.17
✎
17:06
|
:)
|
|||
6
Basilio
21.07.17
✎
17:06
|
(4) угу:)
|
|||
7
Начинающий Восьмерочн
21.07.17
✎
17:07
|
Вот я и прошу помощи как связать эти 2 части чтобы удалить только дубли
|
|||
8
Начинающий Восьмерочн
21.07.17
✎
17:08
|
Мне надо удалить строки не по условию вхождения , а именно отобранные 2-й частью запроса, риб в sql из за этого не грузится
|
|||
9
Генератор
21.07.17
✎
17:09
|
возможно что-то типа where (fld1, fld2,fld3) in (select...)
|
|||
10
Лефмихалыч
21.07.17
✎
17:09
|
INSERT INTO #TempTable
SELECT DISTINCT FROM _InfoRgSL21137 ; truncate table _InfoRgSL21137; insert into _InfoRgSL21137 from #TempTable; drop table #TempTable; |
|||
11
mistеr
21.07.17
✎
17:09
|
(7) Тебе нужно их как-то "рассчитать на первый-второй". Потом удалить только вторые (или первые). Как это делается в скуле, я забыл :(
|
|||
12
Генератор
21.07.17
✎
17:10
|
+(8) нет, он удалит все дубли
|
|||
13
Лефмихалыч
21.07.17
✎
17:12
|
Вообще, автор, ты затеял адскую херню.
Таблица _InfoRgSL - это итоги. Их бессмысленно корёжить - платформа их делает на основании записей в регистре сама |
|||
14
Генератор
21.07.17
✎
17:12
|
нужно что-то типа оконной функции, которая пронумерует строки в пределах группировки и удалить те строки у которых номер строки не 1
|
|||
15
Лефмихалыч
21.07.17
✎
17:13
|
(8) расскажи подробней, что это значит
|
|||
16
mistеr
21.07.17
✎
17:14
|
(14) Точно, это делается оконной функцией!
|
|||
17
Генератор
21.07.17
✎
17:15
|
(15) я передумал, это не сработает
|
|||
18
Начинающий Восьмерочн
21.07.17
✎
17:16
|
Проблема при постройке индекса, и там есть время между тем как данные уже залиты из dt и будет вызвана процедура построения индекса по измерениям возможно вариант из 10 то что нужно
|
|||
19
Лефмихалыч
21.07.17
✎
17:16
|
нахер все оконные функции. автору надо обменник загрузить. Тупо.
|
|||
20
Начинающий Восьмерочн
21.07.17
✎
17:19
|
(19) Текст из (10) не работает
Сообщение 156, уровень 15, состояние 1, строка 2 Неправильный синтаксис около ключевого слова "FROM". Сообщение 156, уровень 15, состояние 1, строка 4 Неправильный синтаксис около ключевого слова "from". |
|||
21
Basilio
21.07.17
✎
17:20
|
select t1.id_header, t1.id_department, count(t1.id_header) cnt from doc_detail_exp t1
inner join doc_detail_exp t2 on t1.id_header = t2.id_header and t1.id_department = t2.id_department group by t1.id_header, t1.id_department having count(t1.id_header) > 1 Это выборка. Удаление аналогично. |
|||
22
Лефмихалыч
21.07.17
✎
17:20
|
(20) ты реально всё копипастой делаешь?
Это не готовое решение, его надо было доработать |
|||
23
Генератор
21.07.17
✎
17:21
|
естественно там поля надо перечислить
|
|||
24
Лефмихалыч
21.07.17
✎
17:21
|
(21) это удалит и дубль, и исходную строку
|
|||
25
mistеr
21.07.17
✎
17:21
|
||||
26
Лефмихалыч
21.07.17
✎
17:22
|
не надо удалять строки из таблицы итогов регистра. Надо разобраться, почему обменник не грузится и починить причину этого
|
|||
27
Ёпрст
21.07.17
✎
17:23
|
WITH DeleteDouble
AS ( SELECT _Fld21123RRef,_Fld21124RRef,_Fld21125RRef, row_number() OVER (PARTITION BY _Fld21123RRef,_Fld21124RRef,_Fld21125RRef ORDER BY _Fld21123RRef,_Fld21124RRef,_Fld21125RRef) rn FROM _InfoRgSL21137 ) DELETE FROM DeleteDouble WHERE rn > 1 |
|||
28
Начинающий Восьмерочн
21.07.17
✎
17:24
|
Там строится уникальный индекс по измерениям, тут он понятно не может построится и вылетает.
|
|||
29
Лефмихалыч
21.07.17
✎
17:24
|
Голос разума?.. Не, не слышали...
|
|||
30
Ёпрст
21.07.17
✎
17:25
|
(28) пересчитай итоги
|
|||
31
Начинающий Восьмерочн
21.07.17
✎
17:26
|
(27) Строки удалились те что надо, буду разбираться дальше.
|
|||
32
Генератор
21.07.17
✎
17:26
|
конечно лучше разобраться с причинами, если неохота то оконная функция будет удалять только текущие новые дубли записей, а решение из (10) будет каждый раз пересоздавать всю таблицу итогов
|
|||
33
Лефмихалыч
21.07.17
✎
17:26
|
пля, да в файле обмена дубли в самом регистре, же, ёптить! Автор просто грузит из какой-нить угондошенной файловой в серверную
|
|||
34
Лефмихалыч
21.07.17
✎
17:27
|
серверную не надо лечить, она не больная
|
|||
35
Начинающий Восьмерочн
21.07.17
✎
17:27
|
(29) Это база получатель никто в ней ничего делать не будет, регистр ценыпоставщиковноменклатуры в общем то нафиг не нужный, думаю этим можно пренебречь
|
|||
36
Лефмихалыч
21.07.17
✎
17:27
|
(32) ну, допустим, снесет он записи. Но проблема не в тех записях, которые уже есьт в таблице и котрые он там удалять пытается, а в тех, которые платформа строит на основании данных, полученных из обменника
|
|||
37
Лефмихалыч
21.07.17
✎
17:28
|
ойфсё
|
|||
38
Генератор
21.07.17
✎
17:29
|
(37) я и подразумеваю что это костыль
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |