안녕하세요
SQL 질문드립니다.
아래와 같은 표를 만들고자 하는데요
EVENTTIME,NAME,CLASS,STATUS,CONTINUECNT는 제공하는 값이고
알고자 하는 값은 CUM_CONTINUECNT 입니다.
보시면 아시겠지만, STATUS 가 FAIL/NORMAL 변경될 때 마다 CUM 은 초기화 되어 1로 바뀌구요
그이후는 누적되어 2.3.4.... 되어야 합니다.
분석함수를 써봐도 제가 아는 지식으로는 EVENTTIME,NAME,CLASS,STATUS 를 PARTITIONED BY 해서
아래처럼 결과가 나옵니다.
3 |
4 |
5 |
1 |
6 |
7 |
8 |
제가 원하는 결과를 산출 할 수 있게끔 도움 부탁드립니다.
EVENTTIME | NAME | CLASS | STATUS | CONTINUECNT | CUM_CONTINUECNT |
2012-10-23 오후 5:05:00 | LEE | HA1 | FAIL | 3 | 3 |
2012-10-23 오후 5:06:03 | LEE | HA1 | FAIL | 1 | 4 |
2012-10-23 오후 5:07:05 | LEE | HA1 | FAIL | 1 | 5 |
2012-10-23 오후 5:08:05 | LEE | HA1 | NORMAL | 1 | 1 |
2012-10-23 오후 5:09:08 | LEE | HA1 | FAIL | 1 | 1 |
2012-10-23 오후 5:10:10 | LEE | HA1 | FAIL | 1 | 2 |
2012-10-23 오후 5:11:10 | LEE | HA1 | FAIL | 1 | 3 |
2012-10-23 오후 5:12:12 | LEE | HA1 | FAIL | 1 | 4 |
2012-10-23 오후 5:13:15 | LEE | HA1 | FAIL | 1 | 5 |
2012-10-23 오후 5:14:17 | LEE | HA1 | FAIL | 1 | 6 |
2012-10-23 오후 5:15:18 | LEE | HA1 | NORMAL | 1 | 1 |
2012-10-23 오후 5:16:20 | LEE | HA1 | NORMAL | 1 | 2 |
2012-10-23 오후 5:17:21 | LEE | HA1 | FAIL | 1 | 1 |
2012-10-23 오후 5:18:23 | LEE | HA1 | FAIL | 1 | 2 |
WITH t AS ( SELECT '20121023170500' eventtime , 'LEE' name , 'HA1' class , 'FAIL' status , 3 continuecnt FROM dual UNION ALL SELECT '20121023170603', 'LEE', 'HA1', 'FAIL' , 1 FROM dual UNION ALL SELECT '20121023170705', 'LEE', 'HA1', 'FAIL' , 1 FROM dual UNION ALL SELECT '20121023170805', 'LEE', 'HA1', 'NORMAL', 1 FROM dual UNION ALL SELECT '20121023170908', 'LEE', 'HA1', 'FAIL' , 1 FROM dual UNION ALL SELECT '20121023171010', 'LEE', 'HA1', 'FAIL' , 1 FROM dual UNION ALL SELECT '20121023171110', 'LEE', 'HA1', 'FAIL' , 1 FROM dual UNION ALL SELECT '20121023171212', 'LEE', 'HA1', 'FAIL' , 1 FROM dual UNION ALL SELECT '20121023171315', 'LEE', 'HA1', 'FAIL' , 1 FROM dual UNION ALL SELECT '20121023171417', 'LEE', 'HA1', 'FAIL' , 1 FROM dual UNION ALL SELECT '20121023171518', 'LEE', 'HA1', 'NORMAL', 1 FROM dual UNION ALL SELECT '20121023171620', 'LEE', 'HA1', 'NORMAL', 1 FROM dual UNION ALL SELECT '20121023171721', 'LEE', 'HA1', 'FAIL' , 1 FROM dual UNION ALL SELECT '20121023171823', 'LEE', 'HA1', 'FAIL' , 1 FROM dual ) SELECT eventtime, name, class, status, continuecnt , SUM(continuecnt) OVER( PARTITION BY name, class, status, rn1-rn2 ORDER BY eventtime ) cum_continuecnt FROM (SELECT eventtime, name, class, status, continuecnt , ROW_NUMBER() OVER(PARTITION BY name, class ORDER BY eventtime) rn1 , ROW_NUMBER() OVER(PARTITION BY name, class, status ORDER BY eventtime) rn2 FROM t ) ORDER BY name, class, eventtime ;