Вопрос по date, sql – Усреднение дат в оракуле sql

5

Есть ли способ усреднить несколько дат в оракуле? avg не приносит никакой пользы.

Благодарю.

Что такое «среднее» Дата? Я думаю, вам нужно быть более точным в том, что вы пытаетесь сделать. Ken White

Ваш Ответ

4   ответа
5

«Медиана» функция в оракуле аккуратно делает именно то, что делают другие ответы.

Вот ссылка на документацию Oracle -https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions086.htm

Он может принимать в качестве аргумента числовой тип данных или нечисловой тип данных, которые могут быть неявно преобразованы в число.

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
0

SYSDATE + AVG( dt - SYSDATE )

Нет необходимости конвертировать дату в дату. Обрежьте все выражение, если вы не хотите, чтобы время было включено в результат. Обрежьте столбец даты (dt), если вы не хотите, чтобы время использовалось при вычислении среднего значения. MEDIAN - это не то же самое, что AVG.

1

Oracle обрабатывает некоторую арифметику дат естественным образом - например, TRUNC (SYSDATE) + 1 вернет завтрашнюю дату.

Поэтому другой подход - сравнить вашу дату с константой:

1) сравнить расстояние в днях с константой (например, SYSDATE)

2) средний, а затем круглый, что расчет

3) сравнить среднее значение с SYSDATE & amp; преобразовать обратно в дату.

Вот некоторый код, который делает это (заменитеdt с каким полем есть ваши данные)

 TO_DATE(
    TRUNC(SYSDATE) - ROUND(AVG(TRUNC(SYSDATE) - TRUNC(dt)))
 )

В некоторых выборочных данных это происходило менее чем в два раза быстрее, чем описанный выше подход Дана А., и приводило к тому же результату. Только проверял его по данным с датами в прошлом, но я не вижу какой-либо очевидной причины, по которой он не будет обобщать (известные последние слова при работе с данными DATETIME, я понимаю ...)

Error: User Rate Limit Exceeded
14

Определение «средней даты» субъективно, но вы можете преобразовать свои даты в юлианские числа, затем усреднить их, округлить, а затем преобразовать обратно в дату.

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;

Вот SQL Fiddle:http://sqlfiddle.com/#!4/98ce9/1

Error: User Rate Limit Exceeded user1261700

Похожие вопросы