¿Hay alguna forma de promediar varias fechas en Oracle? avg no hace ningún bien.Promedio de fechas en Oracle sql
Gracias.
¿Hay alguna forma de promediar varias fechas en Oracle? avg no hace ningún bien.Promedio de fechas en Oracle sql
Gracias.
La definición de "fecha promedio" es subjetiva, pero puede convertir sus fechas en números Julianos, promediarlas, redondearlas y luego convertirlas a una fecha.
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;
Aquí está el violín SQL: http://sqlfiddle.com/#!4/98ce9/1
muchas gracias. aprecia la ayuda – user1261700
Oracle maneja alguna fecha aritmética natural - por ejemplo TRUNCAR (SYSDATE) + 1 volverá fecha de mañana.
Así Otro método consiste en comparar su fecha a una constante:
1) comparar la distancia en día a una constante (por ejemplo SYSDATE)
2) promedio y luego se redondea, que el cálculo
3) compare el promedio de regreso a SYSDATE & convertir a la fecha.
Aquí hay un código que hace esto (sustituir dt con cualquier campo tiene sus datos)
TO_DATE(
TRUNC(SYSDATE) - ROUND(AVG(TRUNC(SYSDATE) - TRUNC(dt)))
)
En algunos datos de ejemplo de este corrió en poco menos de la mitad del tiempo del enfoque de Dan A. anteriormente, y produjo el mismo resultado. Solo lo probé con datos con fechas anteriores, pero no veo ninguna razón obvia de que no se generalice (me doy cuenta de que las últimas palabras son famosas cuando se trata de datos de DATETIME ...)
Sí, parece más eficiente que mi solución. Tendrás "distancias" más pequeñas para calcular y promediar. –
La 'mediana' Funcionar en el oráculo de una manera ordenada hace exactamente lo que hacen otras respuestas.
Aquí hay un enlace a la documentación de Oracle - https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions086.htm
Se puede tomar como un arg un tipo de datos numérico o un tipo de datos no numérico que se puede convertir implícitamente a un número.
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)
No hay necesidad de convertir una fecha a una fecha. Trunca toda la expresión si no quieres incluir el tiempo en el resultado. Trunca la columna de fecha (dt) si no quieres que se usen las horas en el cálculo del promedio. MEDIAN no es lo mismo que AVG.
¿Qué es una fecha "promedio"? Creo que deberás ser más específico sobre lo que intentas hacer. –