안녕하세요.
효율적인 쿼리 방법 문의 드립니다.
1일 단위 Table에 2초간격으로 몇건의 데이터 이용 이렇게 데이터 적제가 됩니다. 총 43000 건 정도입니다.
ex) 1일 단위 Table
unixtime cnt
1399734012 4
1399734014 1
1399734016 3
1399734018 3
1399734020 2
.......
1399734042 1
1399734044 1
1399734046 3
1399734048 3
1399734050 2
제가 추출하고자 하는 것은 오늘 하루 중 10초 동안의 가장 peak 건수 를 뽑아 내는 쿼리 입니다.
위 두 time 을 예로 들면
첫번째 10초간 평균 2.6
.....
두번째 10초간 평균 2
결과
하루중 10초동안의 최고값 2.6 이 표시되어야 합니다.
전체 쿼리 후 로직에서 비교하면서 처리 하려고 했지만 한번에 쿼리로 도출 할 수 있을 거 같아 문의 드립니다.
43000 건 중 10초 간으로 그룹핑 하면 4300 건 중 MAX로 구하면 될 거 같은데
10초간으로 그룹핑 하는것을 어떻게 처리 하면 좋을지 감이 안잡혀서요.
어떻게 하면 좋을 거 같다라고 간략한 조언을 해주시면 진심으로 감사드립니다.
감사합니다
regard.
님께서 unixtime 의 값을 보면 초 앞의 값이 어떤 값인지 모르겠네요.
일자 맞나요?
일단, 답변을 일자'20140513' 기준으로 만들었어요.
WITH TT(UT, CNT) AS ( SELECT '20140513 0002', 2 FROM DUAL UNION ALL SELECT '20140513 0004', 3 FROM DUAL UNION ALL SELECT '20140513 0006', 7 FROM DUAL UNION ALL SELECT '20140513 0008', 1 FROM DUAL UNION ALL SELECT '20140513 0010', 3 FROM DUAL UNION ALL SELECT '20140513 0012', 6 FROM DUAL UNION ALL SELECT '20140513 0014', 8 FROM DUAL UNION ALL SELECT '20140513 0016', 0 FROM DUAL UNION ALL SELECT '20140513 0018', 1 FROM DUAL ) --2. 10초별 합계 및 순위 구하기 SELECT RG.SDT , RG.EDT , SUM(TT.CNT) , ROW_NUMBER() OVER(ORDER BY SUM(TT.CNT) DESC) AS RK FROM TT , (--1. 일자별 10초 간격 구하기 SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') || ' ' || LPAD( (ROWNUM - 1) * 10, 4, '0') AS SDT , TO_CHAR(SYSDATE, 'YYYYMMDD') || ' ' || LPAD( (ROWNUM * 10) , 4, '0') AS EDT FROM DUAL CONNECT BY LEVEL <= 6 ) RG WHERE TT.UT BETWEEN RG.SDT AND RG.EDT GROUP BY RG.SDT, RG.EDT ;
집계함수는 집계 결과만 딸랑 보여주는 것이고
분석함수는 집계 결과도 함께 보여주는 것이죠
지금 집계결과만 필요하므로, 굳이 분석함수를 사용할 필요는 없겠죠.
분석함수에 대해 좀 더 알고자 한다면 다음 자료 참고해 보세요.
http://www.gurubee.net/article/61235