분단위 통계 질문입니다. 0 3 3,110

by 정윤호 [SQL Query] [2011.09.20 20:55:29]


SELECT
    TO_CHAR(CTIME, 'HH24:MI') AS CTIME
    , AVG(A_COLUMN) AS A_AVG
    , AVG(B_COLUMN) AS B_AVG
    , AVG(C_COLUMN) AS C_AVG 
FROM TBL_LOG T1
WHERE T1.SOME_COLUMN = ?
AND CTIME BETWEEN TO_DATE('20110920000000', 'YYYYMMDDHH24MISS') AND TO_DATE('20110920235959', 'YYYYMMDDHH24MISS')
GROUP BY TO_CHAR(CTIME, 'HH24:MI')
ORDER BY CTIME
;


TBL_LOG  테이블에 특정시간 범위 안에 1분단위로 값이 
A_COLUMN, B_COLUMN, C_COLUMN 컬럼 에 인설트 됩니다. CTIME 컬럼은 입력되서 끝나는 시간입니다.

예를 들어 13:28 부터 15:38 분까지 데이터가 들어온다면 13:12 부터 15:38 까지 정상적으로 평균을 구해서 셀렉트 됩니다. 즉, 시간대에 따라 결과 row 가 계속 바뀝니다. 
----------------------------------------------------------------------------------------------------
CTIME    A_AVG    b_AVG    C_AVG
----------------------------------------------------------------------------------------------------
13:28    1 2 3
13:29    2 2 4
13:30    3 4 5
    . . . .
    . . . .
    . . . .
    . . . .
15:37    7 3 2
15:38    6 6 2


result 130 row



전 무조건 00:00 ~ 23:59 즉 1440 row 결과를 도출하고 값이 안들어오는 시간대에는 
A_COLUMN, B_COLUMN, C_COLUMN 에 0 값을 넣어서 결과를 내고 싶습니다.

----------------------------------------------------------------------------------------------------
CTIME A_AVG b_AVG C_AVG
----------------------------------------------------------------------------------------------------
00:00    0 0 0
00:01 0 0 0
00:02 0 0 0
    . . . .
    . . . .
    . . . .
    . . . .
13:28 1 2 3
13:29 2 2 4
13:30 3 4 5
    . . . .
    . . . .
    . . . .
    . . . .
15:37 7 3 2
15:38 6 6 2
    . . . .
    . . . .
    . . . .
    . . . .
23:58    0 0 0
23:59    0 0 0

result 1440 row





DUAL 테이블을 사용해서 하루를 1440 단위로 쪼개서 조인을 하는 방법등을 생각해봤으나 실패해서 질문 올립니다.

고수님들 도와주십시요.
by 암비 [2011.09.21 08:47:20]
원하시는게 이건가요 ?

SELECT TO_CHAR(TRUNC(SYSDATE) + ( LEVEL / 1440 ), 'HH24:MI') AS TM
FROM dual
CONNECT BY LEVEL <= 1440

by 마농 [2011.09.21 09:30:49]
SELECT TO_CHAR(TO_DATE((LEVEL-1)*60, 'sssss'), 'hh24:mi') ctime
FROM dual
CONNECT BY LEVEL <= 24 * 60
;

by 작성자 [2011.09.21 10:39:30]
암비님, 마농님 감사합니다. 해결 되었습니다.
level, connect by 공부하러 갑니다 ^^;;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입