powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите сообразить запрос(поправочка )
4 сообщений из 4, страница 1 из 1
помогите сообразить запрос(поправочка )
    #32078905
Фотография Oleg Afanasiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дело вот в чём
Я разгребаю старое наследие--просто убитую базу.
Её нужно перепланировать. В старой базе в одной таблице и клиенты,
и договора и счета и история изменения по клиентам.
Я сейчас вытягиваю клиентов. Так вот один и тот же клиент
может с комбинацией полей a1,a2 появляться несколько раз,
сколько раз он заключал договор.
А в процессе этого у клиента могли поменяться атрибуты поэтому
если есть одинаковые записи(a1,a2) мне нужно брать ту из них у которой дата больше всех.Это и будут действующие атрибуты клиента.
Вот :-)

Если у кого будут какие идеи--буду рад ;-))
...
Рейтинг: 0 / 0
помогите сообразить запрос(поправочка )
    #32078935
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда мне пришлось решать похожее (мне нужно было из подобной "свалки" посчитать средний остаток, а были остатки на те дни, когда оный изменялся),
то ничего умнее промежуточной таблицы в голову не пришло.

То есть сперва отбираем просто distinct a1, a2 ,

потом для каждой записи делаем
Код: plaintext
1.
2.
update tcli tcag
set last_ag_date=(select max(ag_date) from ag 
where ag.a1=tcag.a1 and ag.a2=tcag.a2)


и финальное
Код: plaintext
1.
2.
3.
update tcli tcag
set last_ag_id=(select ag_id from ag 
where ag.a1=tcag.a1 and ag.a2=tcag.a2 
and ag.ag_date=tcag.last_ag_date)


Сколько понимаю база временно закрыта для новых поступлений, т.о. тебе не нужно мгновенное отображение старых данных в новой структуре и такие запросы, как выше ты можешь позволить?
...
Рейтинг: 0 / 0
помогите сообразить запрос(поправочка )
    #32078936
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс, сделал пост, а потом подумал...
Разумеется, первый и второй шаг объединяются под
Код: plaintext
1.
2.
select a1, a2, max(ag_date) 
from ag
group by a1, a2
...
Рейтинг: 0 / 0
помогите сообразить запрос(поправочка )
    #32078977
Фотография Oleg Afanasiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот как я сообразил:

Код: plaintext
1.
2.
3.
4.
5.
insert into clients(client_id,client_tobo,client_name,client_k111,client_s080,client_risk,client_zaem_class,client_private_form,client_okpo) select crt_clnt_id,crt_tobo,crt_clnt_nm,k111,s080,crt_s080,crt_cls,k081,crt_okpo from tcrt@lio 
where 
(crt_clnt_id,crt_tobo,crt_dte) in
(select crt_clnt_id,crt_tobo,max(crt_dte) from tcrt@lio 
group by crt_clnt_id,crt_tobo)


Спасибо за ответ.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите сообразить запрос(поправочка )
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]