Прямым запросом удалять периодические реквизиты #489177


#0 by palm1c
Подскажите, как прямым запросом удалить периодические реквизиты всех справочников, оставив данные после заданной даты и данные на заданную дату. То есть, допустим, удаляем на 01.01.10, и если у нас одна запись 28.12.09, то ее оставляем. Стандартными методами удаляет очень долго.
#1 by Sadovnikov
Вероятно, запрос написать.
#2 by palm1c
Я знаю, как удалить ВСЕ периодические реквизиты. Возможно, лучше выгрузить значения на дату, удалить ВСЕ реквизиты, а потом загрузить значения?
#3 by Толич
Не пробовали в транзакции это делать?
#4 by ДРАКОННИК-2
ну-ну... а как быть со ссылочной целостностью? контроль нужон...
#5 by palm1c
Я начинаю догадываться об этом.
#6 by ДРАКОННИК-2
блокировки...
#7 by Толич
Извращение Если огромное кол-во периодических реквизитов, тогда в скл перебором удалитею
#8 by palm1c
В транзакции не пробовал.
#9 by palm1c
В СКЛ перебором как сделать не знаю. Могу только запросы писать. Подскажешь как?
#10 by el-gamberro
Писал как-то такой запрос. Но уже ничего не помню))
#11 by acsent
where не_помню_какое_поле_дата < '2010-01-01'
#12 by el-gamberro
так нельзя.
#13 by palm1c
Не катит.
#14 by el-gamberro
помню точно но надо таблицу с самой собой джойнить на условие на удаление по row_id
#15 by el-gamberro
Вообщем для начала надо замутить идентификатор объекта - это будет objid + id
#16 by el-gamberro
потом по этому индентификатору оторбарть все объекты где data больше чем требуемая дата либо max(date)
#17 by Mikeware
а в чем сложность?
#18 by Boroda
Запрос.Выполнить("
#19 by el-gamberro
потом удаляешь все записи где row_id не попали в вышенаписанный отбор.
#20 by el-gamberro
Уже же написали что так нельзя.
#21 by palm1c
не катит. >>если у нас одна запись 28.12.09, то ее оставляем.
#22 by palm1c
ОЙ, ->
#23 by palm1c
Может кто-нибудь выложить запрос?
#24 by Boroda
Возможно, не проверял. Это я нашел в интернете...
#25 by Sadovnikov
А в чем проблема-то? Ты не поверишь, но в связываниях можно использовать условия сне только со знаком "=", но и ">" и "". :)
#26 by Sadovnikov
+ и ">" и "" = и ">" и ""
#27 by palm1c
Выложи запрос, плз
#28 by Sadovnikov
Некогда сейчас писать, блин :(
#29 by Sadovnikov
+ Получаешь последние даты изменений до твоей даты среза и все, что раньше их - удаляешь.
#30 by orefkov
where date<(select max(date)) как-то так, додумывайте.
#31 by palm1c
у кого-то же должен быть запрос?
#32 by Mikeware
И есть. И что? :-)
#33 by Ёпрст
у меня нет, но могу написать.. :)
#34 by Boroda
А может к добавить условие типа:
#35 by acsent
Сначала инсерт на 01.01.2010 потом делит
#36 by Mikeware
ТКВ...
#37 by palm1c
а как айдишник генерить если инсерт?
#38 by Mikeware
тоже ТКВ...
#39 by Ёпрст
зафига ? проще 1 вложенный селект в условие и привет..
#40 by palm1c
Напишите запроса, пожалуйста. А ТКВ - это что-то обидное, что ли?
#41 by orefkov
delete from _1sconst c1 where c1.id != 0 and c1.date < coalesce((select max(c2.date) from _1sconst c2 where c2.id = c1.id and c2.objid = c1.objid and c2.date >=:ВыбДата), :ВыбДата) Вот как-то так наверное...
#42 by Mikeware
ТКВ - это Традиционный Китайский Вопрос - "анахуа?"
#43 by Ёпрст
неа.. если есть только 1 значение с датой, меньше ВыбДата - то её тоже удалит.. а не должно.
#44 by Sadovnikov
А скорость работы запроса нас совсем не интересует? :)
#45 by orefkov
+ Да ступил я, ступил.
#46 by el-gamberro
для таких запросов скорость не принципиальна...
#47 by Sadovnikov
Посмотри последнюю строчку из .
#48 by el-gamberro
Речь я так понимаю о Удалить, а не о прмяых запросах.
#49 by Sadovnikov
Я к тому, что автор как раз и хочет скорость нормальную получить. А ты говоришь, что скорость не важна.
#50 by Ёпрст
вот так примерно..lдля дбф delete from (c.objid+c.id) in (select    c.idd    from    (       select         c.objid+c.id as idd         from 1sconst c         where c.objid<>'     0   '    )c    group by  c.idd    having count(*)>1 )
#51 by el-gamberro
Неправильно. Допусти одна запись с 10.01.01 и это значение единственное.
#52 by el-gamberro
Точнее так: есть 2 записи и обе перед 01.01.10; надо оставить одну, самую последнюю.
#53 by Ёпрст
ну и ? она не удалится... ибо в подзапрос не попадёт по having count(*)>1
#54 by Ёпрст
ааа... об этом даже и не подумал..
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С