2013-05-07 2 views
2

내가 기본적으로이오라클 SQL 합

SELECT (time_a - time_b) FROM t_tabel WHERE t_some_id IN('1','2','3'); 

처럼 보이는 두 개의 타임 스탬프에서 시간 차이를 가져 오는 쿼리는 그때

0 0:4:0.0 
1 0:15:0.0 
0 0:20:0.0 

DAYS HOURS24H:MINUTES:SECONDS:MILLISECONDS 

지금 난 그냥 합계를

출력을 얻을 수있다 dsinterval 이 시간에, 나는 여러 가지를 시도했지만 아무것도 작동하지 않습니다.

SELECT sum(time_a - time_b) FROM t_tabel WHERE t_some_id IN('1','2','3'); 

나를 제공 : 일치하지 않는 데이터 유형을 : 예상 번호가 SECOND

SELECT sum(to_dsinterval(time_a - time_b)) FROM t_tabel 
WHERE t_some_id IN('1','2','3'); 

에게 INTERVAL DAY를 가지고 저를 준다 : 예상 번호가 SECOND

SELECT sum(SELECT time_a - time_b FROM t_tabel 
WHERE t_some_id IN('1','2','3')) from dual; 

에게 INTERVAL DAY를 가지고 저를 준다 : 일치하지 않는 데이터 유형을 : 누락 된 표현

SELECT sum(SELECT to_dsinterval(time_a - time_b) FROM t_tabel 
WHERE t_some_id IN('1','2','3')) from dual; 

준다 : 누락 된 표현

어떻게 든 작동해야합니다.

+1

소수 자릿수 초가 모두 0입니까? 그렇다면 그들은'DATE'로 저장 될 수도 있고,'DATE'에 캐스트되어 합계를 수행 할 수도 있습니다. –

+1

[가능한 평균 시간 간격은 어떻게 되나요?] (http://stackoverflow.com/questions/450581/how-to-average-time-intervals) (OK, 이는 'AVG'에 해당하지만 교장은 동일합니다. 'SUM'을 위해, 그리고 그것은 두 가지 모두를 다루는 AskTom 기사에 연결됩니다 ...) –

+0

Well spotted! 나는 당신의 문제만큼 정확한 데이터 형을 사용하는 것이 도덕적이라고 생각한다. 이 경우에는'date'가 더 좋은 것 같고'timestamp'는 과도한 것 같습니다. 반면에 정확성이 필요하지 않더라도 타임 스탬프 처리를 원하기 때문에 '타임 스탬프와 함께 타임 스탬프'를 사용하려는 경우가 있습니다. –

답변

3

문제는 오라클이 멋진 간격 데이터 유형을 제공하지만 sum 또는 avg에 필요한 집계 함수를 제공하지 않는다는 것입니다.

다행히 톰 카이트,이 구현 내가 과거에 이것을 사용했기 때문에이 문제를 발견하고 "오라클 간격 집계를"인터넷 검색에 의해 다시 발견 http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:5269744394385

확인하기 위해 필요한 기능을 작성했습니다.

+1

동일한 주제에 대한 좋은 블로그 게시물은 http://markhoxey.wordpress.com/2011/08/16/interval-aggregation/에서 찾을 수 있습니다. –