Имя: Пароль:
1C
 
Удаление дублей строк
,
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) я и подразумеваю что это костыль