[TIME1]
ID | DT | S_TM | E_TM |
A2014 | 20141101 | 0900 | 1100 |
A2014 | 20141105 | 0900 | 1100 |
A2014 | 20141106 | 0900 | 1100 |
[TIME2]
ID | DT | S_TM | E_TM | STAT |
A2014 | 20141101 | 0901 | 1100 | 1 |
A2014 | 20141105 | 0000 | 0000 | 2 |
A2014 | 20141106 | 0000 | 0000 | 2 |
A2014 | 20141107 | 0900 | 1059 | 1 |
TIME1은 실제 시간표, TIME2는 시간표에 따른 출석 결과값이 들어있습니다.
TIME2의 STAT는 1이면 출석 / 2이면 결석을 의미하는 컬럼입니다
결과값 = Y/N(5일연속결석 여부)
PL/SQL 없이도 가능한 방법을 연구중인데 도저히 방법이 안떠오르네요 ㅠㅠ
s_tm, e_tm 은 출결여부에 아무런 영향이 없는 항목인듯 합니다.
time2 안에 이미 time1 값이 포함된 듯 합니다.
따라서 time2 의 (id, dt, stat) 만으로 결과 도출이 가능할 듯 합니다.
예시자료가 부족하여 제가 추가로 만들어 봤습니다.
A2014 는 5일 이상 결석했지만 5일연속결석은 아님(N).
B2015 는 5일연속결석 (Y).
WITH time2 AS ( SELECT 'A2014' id, '20141101' dt, 1 stat FROM dual UNION ALL SELECT 'A2014', '20141105', 2 FROM dual UNION ALL SELECT 'A2014', '20141106', 2 FROM dual UNION ALL SELECT 'A2014', '20141107', 1 FROM dual UNION ALL SELECT 'A2014', '20141108', 2 FROM dual UNION ALL SELECT 'A2014', '20141109', 2 FROM dual UNION ALL SELECT 'A2014', '20141110', 2 FROM dual UNION ALL SELECT 'A2014', '20141111', 2 FROM dual UNION ALL SELECT 'B2015', '20141101', 1 FROM dual UNION ALL SELECT 'B2015', '20141102', 2 FROM dual UNION ALL SELECT 'B2015', '20141103', 2 FROM dual UNION ALL SELECT 'B2015', '20141104', 2 FROM dual UNION ALL SELECT 'B2015', '20141105', 2 FROM dual UNION ALL SELECT 'B2015', '20141106', 2 FROM dual UNION ALL SELECT 'B2015', '20141107', 2 FROM dual UNION ALL SELECT 'B2015', '20141108', 1 FROM dual UNION ALL SELECT 'B2015', '20141109', 2 FROM dual UNION ALL SELECT 'B2015', '20141110', 2 FROM dual UNION ALL SELECT 'B2015', '20141111', 2 FROM dual UNION ALL SELECT 'B2015', '20141112', 1 FROM dual UNION ALL SELECT 'B2015', '20141113', 1 FROM dual UNION ALL SELECT 'B2015', '20141114', 2 FROM dual UNION ALL SELECT 'B2015', '20141115', 1 FROM dual ) SELECT id , MAX(CASE WHEN cnt = 5 AND st = 2 THEN 'Y' ELSE 'N' END) flag FROM (SELECT id, dt, stat , COUNT(*) OVER(PARTITION BY id ORDER BY dt ROWS 4 PRECEDING) cnt , MIN(stat) OVER(PARTITION BY id ORDER BY dt ROWS 4 PRECEDING) st FROM time2 WHERE dt LIKE '201411%' --AND id = 'A2014' ) GROUP BY id ;