Печать
Категория: Вопросы и ответы Oracle
Просмотров: 15687

Вычислить разницу между двумя датами в соседних строках одного столбца можно с помощью аналитических функций LAG или LEAD. Первая возвращает значение из предыдущей строки столбца. Вторая из последующей строки столбца. К примеру, следующий запрос выводит время первой записи в предыдущем журнальном файле:

SELECT first_time, LAG(first_time, 1) OVER (ORDER BY first_time) prev_time 
  FROM v$log_history

Теперь можно просто вычесть полученные даты друг из друга. Для удобства отображения разницы дат можно применить функцию EXTRACT. Например, следующий запрос возвращает разницу в минутах межу двумя первыми записями соседних журнальных файлов:

SELECT first_time, prev_time, 
       EXTRACT(MINUTE FROM (first_time - prev_time) DAY TO SECOND) delta 
  FROM ( SELECT first_time, LAG(first_time, 1) OVER (ORDER BY first_time) prev_time 
           FROM v$log_history )