В Oracle 10g у меня есть таблица, в которой хранятся временные метки, показывающие, как долго выполнялись определенные операции. Он имеет два временных поля: время начала и время окончания. Я хочу найти средние значения продолжительности, заданные этими метками времени. Я пытаюсь:
select avg(endtime-starttime) from timings;
Но получим:
Ошибка SQL: ORA-00932: непоследовательный datatypes: ожидается NUMBER INTERVAL DAY TO SECOND
Это работает:
select
avg(extract( second from endtime - starttime) +
extract ( minute from endtime - starttime) * 60 +
extract ( hour from endtime - starttime) * 3600) from timings;
Но очень медленно.
Есть ли лучший способ превратить интервалы в числа секунд или какой-либо другой способ сделать это?
EDIT: То, что действительно замедлило это, было тем фактом, что у меня было какое-то время перед стартом. По некоторым причинам этот расчет невероятно медленный. Моя основная проблема была решена путем исключения их из набора запросов. Я также просто определил функцию, облегчающую это преобразование:
FUNCTION fn_interval_to_sec ( i IN INTERVAL DAY TO SECOND )
RETURN NUMBER
IS
numSecs NUMBER;
BEGIN
numSecs := ((extract(day from i) * 24
+ extract(hour from i) )*60
+ extract(minute from i) )*60
+ extract(second from i);
RETURN numSecs;
END;