Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 сортировка по предыдущей группе строк/строке  [new]
LeVa78
Member

Откуда:
Сообщений: 16
Доброго времени суток!
Если что, не судите строго :-)
Имеется набор данных изменения статуса документа по времени:

StOld StNew Ins
0 1 10.06.2016 13:49:57
1 3 10.06.2016 13:49:58
3 4 10.06.2016 13:50:01
4 3 10.06.2016 13:50:03
2 1 10.06.2016 21:11:13
3 2 10.06.2016 21:11:13
1 2 10.06.2016 21:11:13
2 1 11.06.2016 20:58:10
3 2 11.06.2016 20:58:10
1 3 11.06.2016 20:58:10
2 4 14.06.2016 10:52:30

Есть записи с одинаковой датой изменения 10.06.2016 21:11:13 и 11.06.2016 20:58:10.
Хотелось бы отсортировать смену статусов в последовательности их реальной смены.
Очевидно, что для группы статусов от 10.06.2016 21:11:13 входящим StNew является статус StOld = 3 от 10.06.2016 13:50:03 и т.п.
Т.е. на выходе хотелось бы получить:

StOld StNew Ins
0 1 10.06.2016 13:49:57
1 3 10.06.2016 13:49:58
3 4 10.06.2016 13:50:01
4 3 10.06.2016 13:50:03
3 2 10.06.2016 21:11:13
2 1 10.06.2016 21:11:13
1 2 10.06.2016 21:11:13
2 1 11.06.2016 20:58:10
1 3 11.06.2016 20:58:10
3 2 11.06.2016 20:58:10
2 4 14.06.2016 10:52:30
16 июн 16, 09:44    [19298757]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по предыдущей группе строк/строке  [new]
Egoр
Member

Откуда:
Сообщений: 822
LeVa78,

Что делать, когда в течение одной секунды документ дважды побывает в одном и том же статусе?
16 июн 16, 09:51    [19298798]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по предыдущей группе строк/строке  [new]
LeVa78
Member

Откуда:
Сообщений: 16
Это исключительная ситуация - допустимо сообщение об ошибке.
16 июн 16, 09:53    [19298807]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по предыдущей группе строк/строке  [new]
Egoр
Member

Откуда:
Сообщений: 822
LeVa78,

Есть возможность добавить в протокол статусов поле со счётчиком?
16 июн 16, 09:53    [19298808]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по предыдущей группе строк/строке  [new]
LeVa78
Member

Откуда:
Сообщений: 16
Egoр,
есть, но это не по спортивному :-)
16 июн 16, 09:54    [19298816]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по предыдущей группе строк/строке  [new]
Egoр
Member

Откуда:
Сообщений: 822
LeVa78,

LeVa78
не по спортивному :-)
Ага. А делать навороты с поиском стартового/финишного статуса и построением переходов, которые еще и кольцеваться могут, это, по-вашему, спорт? :)
Впрочем, если в одну секунду попадает не более трех переходов, то достаточно найти именно старт и финиш.
16 июн 16, 10:01    [19298850]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по предыдущей группе строк/строке  [new]
LeVa78
Member

Откуда:
Сообщений: 16
Egoр,
старт и финиш ищется легко, если известен предыдущий финиш - подсчёт количества статусов и там и там за вычетом стартового.
Тот статус, которого нечётное количество - финишный для данной группы, ну или обход по дереву.
16 июн 16, 10:05    [19298888]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по предыдущей группе строк/строке  [new]
uZverrr
Member

Откуда: Беларусь
Сообщений: 51
LeVa78,

а если стартовые значения выборки тож будут укладываться в 1 секунду, что будет родительским статусом?
16 июн 16, 10:09    [19298905]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по предыдущей группе строк/строке  [new]
LeVa78
Member

Откуда:
Сообщений: 16
uZverrr,
начальная запись со StOld = 0 всегда единственная.
На выходе каждой группы записей и тем более одной записи, имеем вполне определённый статус для старта следующей группы.
16 июн 16, 10:14    [19298932]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по предыдущей группе строк/строке  [new]
uZverrr
Member

Откуда: Беларусь
Сообщений: 51
LeVa78,

если тебе нужен последний статус, то соглашусь с Egoр: расширить столбцом, например, ACTIVE_STATUS, и для последнего хранить отметку, закрывая предыдущие записи.
16 июн 16, 10:53    [19299160]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по предыдущей группе строк/строке  [new]
LeVa78
Member

Откуда:
Сообщений: 16
uZverrr,
проще тогда столбцом с ИД из последовательности.
16 июн 16, 11:00    [19299200]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по предыдущей группе строк/строке  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2386
Блог
LeVa78,

create table inout (in_ number(2) not null, out_ number(2) not null, eventdt date not null);

insert into inout
  select 0,1,to_date('2016-06-10 13:49:57', 'YYYY-MM-DD HH24:MI:SS') from dual union all
  select 1,2,to_date('2016-06-10 13:49:58', 'YYYY-MM-DD HH24:MI:SS') from dual union all
  select 2,3,to_date('2016-06-10 13:50:01', 'YYYY-MM-DD HH24:MI:SS') from dual union all
  select 3,2,to_date('2016-06-10 13:50:03', 'YYYY-MM-DD HH24:MI:SS') from dual union all
  select 2,4,to_date('2016-06-10 21:11:13', 'YYYY-MM-DD HH24:MI:SS') from dual union all
  select 4,1,to_date('2016-06-10 21:11:13', 'YYYY-MM-DD HH24:MI:SS') from dual union all
  select 1,4,to_date('2016-06-10 21:11:13', 'YYYY-MM-DD HH24:MI:SS') from dual union all
  select 4,2,to_date('2016-06-11 20:58:10', 'YYYY-MM-DD HH24:MI:SS') from dual union all
  select 2,3,to_date('2016-06-11 20:58:10', 'YYYY-MM-DD HH24:MI:SS') from dual union all
  select 3,2,to_date('2016-06-11 20:58:10', 'YYYY-MM-DD HH24:MI:SS') from dual union all
  select 2,5,to_date('2016-06-14 21:58:10', 'YYYY-MM-DD HH24:MI:SS') from dual union all
  select 5,1,to_date('2016-06-14 22:58:10', 'YYYY-MM-DD HH24:MI:SS') from dual
/

commit;

select in_,out_,eventdt
from (select in_, out_, eventdt, lead(eventdt) over (order by eventdt) as nxt from inout) a
connect by in_ = prior out_ 
  and eventdt = prior nxt 
start with in_ = 0 
order by eventdt, level
/
16 июн 16, 11:03    [19299230]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по предыдущей группе строк/строке  [new]
рекурсия
Guest
LeVa78
Очевидно
На счет очевидности сильно преувеличиваешь, из 1, 2, 3 после 0 можно сформировать шесть последовательностей. и не очевидно, что приложение не допускает запись одного и того же.
16 июн 16, 11:13    [19299312]     Ответить | Цитировать Сообщить модератору
 Re: сортировка по предыдущей группе строк/строке  [new]
LeVa78
Member

Откуда:
Сообщений: 16
Павел Воронцов,

спасибо!
16 июн 16, 13:15    [19300016]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить