powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как написать update
4 сообщений из 4, страница 1 из 1
Как написать update
    #39385892
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите дописать update

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Update templ.sat_subject_attrs sat_subj

set time_to=
(
select max(time_to_new) from 
 (
  select 
  ssa.subj_id, ssa.time_from,
   coalesce(lead (ssa.time_from, 1) over(
      partition by ssa.subj_id order by ssa.time_from asc), 
      to_Date('9999-12-31 00:00:00', 'YYYY-MM_DD HH24:MI:SS'))
      as time_to_new
  from templ.sat_subject_attrs ssa
  where ssa.subj_id=429230
 )sat_subj_new
    where sat_subj_new.subj_id=sat_subj.subj_id and
      sat_subj_new.time_from=sat_subj.time_from 
 )
 where sat_subj.subj_id=429230



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
При таком update, будет получен результат 
subj_id              time_from                   time_to
429230		1999-09-24 00:00:00	  2000-01-14 00:00:00
429230		1999-09-24 00:00:00	  2000-01-14 00:00:00
429230		2000-01-14 00:00:00	  2004-12-14 00:00:00
429230		2000-01-14 00:00:00	  2004-12-14 00:00:00
429230		2004-12-14 00:00:00	  2007-04-10 00:00:00
429230		2007-04-10 00:00:00	  2014-10-29 14:32:28
429230		2014-10-29 14:32:28  9999-12-31 00:00:00

Как переписать, чтобы получить следующий результат

subj_id                time_from                     time_to
429230		1999-09-24 00:00:00	  1999-09-24 00:00:00
429230		1999-09-24 00:00:00	  2000-01-14 00:00:00
429230		2000-01-14 00:00:00	  2000-01-14 00:00:00
429230		2000-01-14 00:00:00	  2004-12-14 00:00:00
429230		2004-12-14 00:00:00	  2007-04-10 00:00:00
429230		2007-04-10 00:00:00	  2014-10-29 14:32:28
429230		2014-10-29 14:32:28  9999-12-31 00:00:00
...
Рейтинг: 0 / 0
Как написать update
    #39386002
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второй результат отличается от первого то, что в time_to любая запись, это следующая запись из time_to.
...
Рейтинг: 0 / 0
Как написать update
    #39386054
2107tsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй так
BEGIN WORK;
-- Создание курсора:
DECLARE cursors01 SCROLL CURSOR FOR SELECT * FROM templ.sat_subject_attrs sat_subj where subj_id = 429230;
-- Получение следующей строки через курсор
FETCH next FROM cursors01 INTO cursors02
update templ.sat_subject_attrs sat_subj set time_to = (case when cursors01.time_from is not null then cursors01.time_from else '9999-12-31 00:00:00' end)
WHERE CURRENT OF FETCH last FROM cursors01;
CLOSE cursors01;
COMMIT WORK;
...
Рейтинг: 0 / 0
Как написать update
    #39386145
2107tsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или так
Update templ.sat_subject_attrs sat_subj

set time_to=
(
select max(time_to_new) from
(
select
ssa.ctid, ssa.time_from,
coalesce(lead (ssa.time_from, 1) over(
partition by ssa.subj_id order by ssa.time_from asc),
to_Date('9999-12-31 00:00:00', 'YYYY-MM_DD HH24:MI:SS'))
as time_to_new
from templ.sat_subject_attrs ssa
where ssa.subj_id=429230
)sat_subj_new
where sat_subj_new.ctid = '' || sat_subj.ctid || ''::tid and
sat_subj_new.time_from=sat_subj.time_from
)
where sat_subj.subj_id=429230
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как написать update
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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