Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / История изменения поля. Как взять последнее изменение? / 8 сообщений из 8, страница 1 из 1
20.06.2017, 06:38
    #39474535
История изменения поля. Как взять последнее изменение?
Доброго дня!
Имею историю изменения некого поля. Имею и дату изменения, но столкнулся с тем, что в одну секунду прошло 2 изменения. Никакого автоинкремента нет в таблице. Не могу понять, как отсортировать строки с учетом изменений, дабы взять последнее изменение?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t as
 (select 'Значение1' oldr, 'Значение2' newr
    from dual
  union all
  select 'Значение2', 'Значение3'
    from dual
  union all
  select 'Значение3', 'Значение4'
    from dual
  union all
  select 'Значение4', 'Значение5'
    from dual)
select t.* from t



Спасибо!
...
Рейтинг: 0 / 0
20.06.2017, 06:39
    #39474536
История изменения поля. Как взять последнее изменение?
Каюсь. Это ведь обычное дерево.
Вопрос снят. Доброго дня!
...
Рейтинг: 0 / 0
20.06.2017, 06:59
    #39474539
История изменения поля. Как взять последнее изменение?
Хотя, не такое уж и обычное

Возможно следующее:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
with t as
 (select 'Значение1' oldr, 'Значение2' newr
    from dual
  union all
  select 'Значение2', 'Значение3'
    from dual
  union all
  select 'Значение3', 'Значение4'
    from dual
  union all
  select 'Значение4', 'Значение5'
    from dual
  union all
  select 'Значение5', 'Значение1'
    from dual
  union all
  select 'Значение1', 'Значение4'
    from dual
  
  )
select t.*, level
  from t
 START WITH 'Значение1' = oldr
CONNECT BY NOCYCLE prior newr = oldr



Последним изменением, конечно же, будет изменение с 'Значение1' на 'Значение4'. Как получить его?
...
Рейтинг: 0 / 0
20.06.2017, 08:42
    #39474560
цоннецт бы
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
История изменения поля. Как взять последнее изменение?
Взять строкуКак получить его?добавить атрибут последовательности переходов.
...
Рейтинг: 0 / 0
20.06.2017, 10:58
    #39474624
Maxmix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
История изменения поля. Как взять последнее изменение?
Если значение может меняться произвольным образом, и нет данных для однозначной сортировки, то очевидно никак.
...
Рейтинг: 0 / 0
20.06.2017, 11:46
    #39474644
AnSi_Sr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
История изменения поля. Как взять последнее изменение?
Для общего случая (когда в один момент времени осуществляется несколько переходов между состояниями да еще и с зацикливанием) нужно начать с упорядочения этих моментов времени с помощью dense_rank, а в иерархическом соединении (connect by) к условию на равенство prior previous state и current state добавить ограничение на prior ndencerank = ndencerank + 1 (или наоборот).
...
Рейтинг: 0 / 0
20.06.2017, 12:03
    #39474658
История изменения поля. Как взять последнее изменение?
цоннецт бы,

Можно подробнее?

AnSi_Sr,

Не могли бы вы перевести это на язык структрурированных запросов? :)
...
Рейтинг: 0 / 0
20.06.2017, 13:01
    #39474697
AnSi_Sr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
История изменения поля. Как взять последнее изменение?
Взять строкуAnSi_Sr,
Не могли бы вы перевести это на язык структрурированных запросов? :)


Хорошо, имел в виду следующее:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
WITH
...
SELECT s_states.*, DENSE_RANK () OVER (ORDER BY s_states.dtime) as nrank
...
SELECT level, sys_connect_by_path(s_states2.scurrentstate, '->') as spath, s_states2.*
CONNECT BY PRIOR s_states2.scurrentstate = s_states2.spreviousstate
            AND PRIOR s_states2.nrank = s_states2.nrank + 1


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


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