Wie zu durchschnittlichen Abständen?

In Oracle 10g habe ich eine Tabelle, die hält Zeitstempel zeigt an, wie lange bestimmte Vorgänge nahm. Es hat zwei timestamp Felder: starttime und endtime. Ich möchte zu finden, die Mittelwerte der Laufzeiten gegeben durch diese Zeitstempel. Ich versuche:

select avg(endtime-starttime) from timings;

Aber erhalten:

SQL-Fehler: ORA-00932: inkonsistente
datatypes: expected NUMBER got
INTERVAL DAY TO SECOND

Dies funktioniert:

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

Ist aber wirklich langsam.

Einen besseren Weg zu drehen Abständen in die Anzahl von Sekunden, oder auf eine andere Weise, dies zu tun?

BEARBEITEN:
Was war wirklich verlangsamen diese nach unten, war die Tatsache, dass ich hatte einige Endzeit vor der Startzeit. Für einige Grund, dass aus dieser Berechnung unglaublich langsam. Meine zugrunde liegende problem wurde gelöst durch die Beseitigung von Ihnen aus der Abfrage gesetzt. Ich habe auch gerade definierten Funktion zu tun, diese Umstellung leichter:

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;

InformationsquelleAutor der Frage Justsalt | 2009-01-16

Schreibe einen Kommentar