Oracle получает старое и новое значение из таблицы аудита - PullRequest
0 голосов
/ 15 мая 2018

Скажем, у меня есть структура таблицы аудита вроде (упрощенно).

OID,VALUE,CHANGED_DATE

, и я хотел бы написать запрос, который для каждого изменения VALUE дает мне следующий вывод.

OLD_VALUE,NEW_VALUE,CHANGED_DATE

Как бы я поступил так?Так, например, если бы у меня было

OID|VALUE|CHANGED_DATE
----------------------
1  |ABC  |15-JAN-18
2  |DEF  |22-JUN-18
3  |XYZ  |16-JUL-18

, я хотел бы видеть вывод как:

OLD_VALUE|NEW_VALUE|CHANGED_DATE
--------------------------------
ABC      |DEF      |22-JUN-18
DEF      |XYZ      |16-JUL-18

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Вы хотите lead():

select t.*
from (select oid, lead(value) over (order by changed_date) as next_value, changed_date
      from table 
     ) t
where next_value is not null;
0 голосов
/ 15 мая 2018

Использование lag():

select oid, lag(oid) over (order by changed_date) as prev_oid, changed_date
from t;

Этот код включает все три строки. Если вы хотите устранить первое:

select *
from (select oid, lag(oid) over (order by changed_date) as prev_oid, changed_date
      from t
     ) t
where prev_oid is not null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...