Gibt es eine Möglichkeit, mehrere Daten in Oracle zu mitteln? avg tut nicht gut.Mittelung von Daten in Oracle sql
Danke.
Gibt es eine Möglichkeit, mehrere Daten in Oracle zu mitteln? avg tut nicht gut.Mittelung von Daten in Oracle sql
Danke.
Die Definition eines "durchschnittlichen Datums" ist subjektiv, aber Sie könnten Ihre Daten in eine julianische Zahl umwandeln, diese dann mitteln, abrunden und dann in ein Datum zurückkonvertieren.
create table dates (dt DATE);
insert into dates
values ('24-APR-2012');
insert into dates
values ('01-JAN-2012');
insert into dates
values ('01-JAN-2013');
insert into dates
values ('25-DEC-1900');
select to_date(round(avg(to_number(to_char(dt, 'J')))),'J')
from dates;
Hier ist die SQL Fiddle: http://sqlfiddle.com/#!4/98ce9/1
vielen Dank. schätze die Hilfe. – user1261700
Oracle übernimmt einen Teil Datumsberechnungen natürlich - zB TRUNC (SYSDATE) + 1 wird das morgige Datum zurück.
So ein anderer Ansatz ist Ihr Datum zu einer Konstante vergleichen: in Tagen zu einer Konstante (zB SYSDATE)
2) Durchschnitt und dann rund
1) vergleichen Abstand, dass die Berechnung
3) vergleichen Sie den Durchschnitt zurück zu SYSDATE & konvertieren zurück auf das Datum.
Hier einige Code ist, das dies tut (ersetzen dt mit dem, was Feld hat Ihre Daten)
TO_DATE(
TRUNC(SYSDATE) - ROUND(AVG(TRUNC(SYSDATE) - TRUNC(dt)))
)
Auf einigen Beispieldaten dies in knapp der Hälfte der Zeit der Annäherung Dan A. die oben lief, und produzierte die gleiche Ausgabe. Nur getestet es gegen Daten mit Daten in der Vergangenheit, aber ich sehe keinen offensichtlichen Grund, dass es nicht verallgemeinern würde (berühmte letzte Worte im Umgang mit DATETIME Daten, realisiere ich ...)
Ja, das sieht effizienter aus als meine Lösung. Sie haben kleinere "Distanzen" zum Berechnen und Mitteln. –
Der 'Median' Funktion in Orakel in einer ordentlichen Art und Weise tut genau was andere Antworten tun. Hier
ist ein Link auf die Oracle-Dokumentation - https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions086.htm
es als arg einen numerischen Datentyp nehmen oder ein nicht-numerischen Datentyps, der implizit in eine Zahl umgewandelt werden kann.
SQL> desc x1
Name Null? Type
----------------------------------------- -------- ----------------------------
A NOT NULL NUMBER
D DATE
SQL> select * from x1;
A D
---------- ---------
1 11-DEC-14
2 13-DEC-14
3 22-DEC-14
4 02-DEC-14
SQL> select median(d) from x1;
MEDIAN(D)
---------
12-DEC-14
SYSDATE + AVG(dt - SYSDATE)
Keine Notwendigkeit, ein Datum zu einem Datum zu konvertieren. Schneiden Sie den gesamten Ausdruck ab, wenn die Zeit nicht in result enthalten sein soll. Kürzen Sie die Datumsspalte (dt), wenn Sie nicht möchten, dass Zeiten bei der Berechnung des Durchschnitts verwendet werden. MEDIAN ist nicht dasselbe wie AVG.
Was ist ein "durchschnittliches" Datum? Ich denke, Sie müssen genauer darüber sein, was Sie zu tun versuchen. –