¿Cómo promediar intervalos de tiempo?

En Oracle 10g tengo una tabla que contiene marcas de tiempo que muestran cuánto tiempo tomaron ciertas operaciones. Tiene dos campos de marca de tiempo: hora de inicio y hora de finalización. Quiero encontrar promedios de las duraciones dadas por estas marcas de tiempo. Lo intento:

select avg(endtime-starttime) from timings;

Pero obtén:

Error de SQL: ORA-00932: tipos de datos inconsistentes: el NÚMERO esperado obtuvo DÍA DE INTERVALO AL SEGUNDO

Esto funciona:

select
     avg(extract( second from  endtime - starttime) +
        extract ( minute from  endtime - starttime) * 60 +
        extract ( hour   from  endtime - starttime) * 3600) from timings;

Pero es realmente lento.

¿Alguna mejor manera de convertir los intervalos en números de segundos, o de alguna otra manera hacer esto?

EDITAR: Lo que realmente desaceleró esto fue el hecho de que tenía algunos tiempos finales antes del tiempo de inicio. Por alguna razón, este cálculo fue increíblemente lento. Mi problema subyacente se resolvió eliminándolos del conjunto de consultas. También acabo de definir una función para hacer esta conversión más fácil:

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;

Respuestas a la pregunta(6)

Su respuesta a la pregunta