이미 테이블엔 15분단위로 들어가져 있지만 select을 할떄는
30분 단위로 보여주며 그사이에 다른 컬럼들의 데이터를 SUM을 해야하는
상황이 되었는데요.. 어떤식으로 해야할지 떠오르지가 않습니다 ㅜㅜ
도움부탁드리겠습니다..
데이터 형식은 vchar(8) 입니다. ORACLE DB 입니다.
현재
TIME DATA
0900 1
0915 1
0930 3
0945 0
1000 2
1015 1
1030 3
1045 0
1100 1
수정후
TIME DATA
0900 1
0930 4
1000 2
1030 4
1100 1
SELECT
TIME
SUM (data1)
FROM TABLE1
GROUP BY TIME
위가 기존 쿼리라고 보시면 됩니다 ㅜㅜ
조잡한데..ㅠㅠ 깔끔한 방법이 안떠오르네요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | WITH T (TI, DAT) AS ( SELECT '0900' , 1 FROM DUAL UNION ALL SELECT '0915' , 1 FROM DUAL UNION ALL SELECT '0930' , 3 FROM DUAL UNION ALL SELECT '0945' , 0 FROM DUAL UNION ALL SELECT '1000' , 2 FROM DUAL UNION ALL SELECT '1015' , 1 FROM DUAL UNION ALL SELECT '1030' , 3 FROM DUAL UNION ALL SELECT '1045' , 0 FROM DUAL UNION ALL SELECT '1100' , 1 FROM DUAL ) SELECT TO_CHAR(TI, 'HH24MI' ) TI, SUM_DATA FROM ( SELECT TRUNC(TO_TIMESTAMP(TI, 'HH24MI' ), 'HH' ) + ROUND(EXTRACT( MINUTE FROM TO_TIMESTAMP(TI, 'HH24MI' )) / 30) * INTERVAL '30' MINUTE TI, SUM (DAT) SUM_DATA FROM T GROUP BY TRUNC(TO_TIMESTAMP(TI, 'HH24MI' ), 'HH' ) + ROUND(EXTRACT( MINUTE FROM TO_TIMESTAMP(TI, 'HH24MI' )) / 30) * INTERVAL '30' MINUTE ) ORDER BY TI |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | WITH t AS ( SELECT '0900' tm, 1 v FROM dual UNION ALL SELECT '0915' , 1 FROM dual UNION ALL SELECT '0930' , 3 FROM dual UNION ALL SELECT '0945' , 0 FROM dual UNION ALL SELECT '1000' , 2 FROM dual UNION ALL SELECT '1015' , 1 FROM dual UNION ALL SELECT '1030' , 3 FROM dual UNION ALL SELECT '1045' , 0 FROM dual UNION ALL SELECT '1100' , 1 FROM dual ) SELECT TO_CHAR(TO_DATE(tm, 'hh24mi' ) + SUBSTR(tm, -1) * 3/24/60, 'hh24mi' ) tm , SUM (v) v FROM t GROUP BY TO_DATE(tm, 'hh24mi' ) + SUBSTR(tm, -1) * 3/24/60 ORDER BY tm ; |