2012-04-24 2 views
5

oracle에서 여러 날짜의 평균을 구할 수있는 방법이 있습니까? 평균은 좋은 일을하지 않습니다.oracle sql의 평균 날짜

감사합니다.

+2

"평균"날짜 란 무엇입니까? 당신이하려는 일에 대해 좀 더 구체적으로 알아야 할 것 같습니다. –

답변

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 바이올린의 : http://sqlfiddle.com/#!4/98ce9/1

+0

감사합니다. 도움을 감사하십시오. – user1261700

1

오라클은 자연적으로 일부 날짜 연산을 처리 - 예를 들어, TRUNC (SYSDATE) + 1 내일의 날짜를 반환합니다.

그래서 다른 방법은 일정에 날짜를 비교하는 것입니다 :

1) 일정에 일에 거리를 비교 (예 : SYSDATE)

2) 평균, 다음 라운드, 그 계산

3) 평균을 다시 SYSDATE &으로 변환하여 현재 날짜로 변환하십시오.

가 여기에이 작업을 수행하는 코드이다 (와 DT 대체 어떤 필드가 데이터)이 바로 위의 댄 A.의 접근 시간의 절반 아래에 달렸다 일부 샘플 데이터에

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

, 같은 출력을 내었다. 과거 날짜의 데이터에 대해서만 테스트했는데 일반화하지 않을 분명한 이유가 없습니다 (DATETIME 데이터를 처리 할 때 유명한 마지막 단어, 실현 ...)

+0

그래, 그건 내 솔루션보다 효율적으로 보이지 않습니다. 계산할 평균 거리가 더 작습니다. –

5

'중간 값' 깔끔한 방식으로 오라클의 기능이 정확히 다른 답변을 않습니다. https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions086.htm

그것은이 인수 숫자 데이터 형식 또는 숫자로 암시 적으로 변환 할 수있는 숫자가 아닌 데이터 형을 취할 수 - 여기

은 Oracle 설명서에 대한 링크입니다.

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와 다릅니다.