ㅠㅠ 허접한 죄송합니다.
A 테이블에
시간 | 부서 | 이름 | 득점 |
2017-08-07 11:11:12 | 개발 | 1 | 120 |
2017-08-07 11:11:13 | 개발 | 2 | 130 |
2017-08-07 11:11:14 | 개발 | 3 | 100 |
2017-08-07 11:15:11 | 관리 | 관리 | 11 |
2017-08-07 11:15:12 | 관리 | 관뤼 | 123 |
2017-08-07 11:15:13 | 개발 | 1 | 100 |
2017-08-07 11:15:14 | 개발 | 2 | 160 |
2017-08-07 11:15:16 | 개발 | 3 | 170 |
2017-08-07 11:15:18 | 폐기 | 패자 | 10 |
이런식으로 있으면
11:11 에 있었던 개발부서 1,2,3의 득점을 가지고 1등과 꼴지를 정하고
11:15에 있었던 개발부서 1,2,3의 득점을가지고 1등과 꼴찌를 따로 정하는...
그런것입니다!
WITH t AS ( SELECT '2017-08-07 11:11:12' dt, '개발' dept, '1' nm, 120 scr FROM dual UNION ALL SELECT '2017-08-07 11:11:13', '개발', '2' , 130 FROM dual UNION ALL SELECT '2017-08-07 11:11:14', '개발', '3' , 100 FROM dual UNION ALL SELECT '2017-08-07 11:15:11', '관리', '관리', 11 FROM dual UNION ALL SELECT '2017-08-07 11:15:12', '관리', '관뤼', 123 FROM dual UNION ALL SELECT '2017-08-07 11:15:13', '개발', '1' , 100 FROM dual UNION ALL SELECT '2017-08-07 11:15:14', '개발', '2' , 160 FROM dual UNION ALL SELECT '2017-08-07 11:15:16', '개발', '3' , 170 FROM dual UNION ALL SELECT '2017-08-07 11:15:18', '폐기', '패자', 10 FROM dual ) SELECT dt, dept, nm, scr , RANK() OVER(PARTITION BY dept, rn1 - rn2 ORDER BY scr DESC) rk FROM (SELECT dt, dept, nm, scr , ROW_NUMBER() OVER(ORDER BY dt) rn1 , ROW_NUMBER() OVER(PARTITION BY dept ORDER BY dt) rn2 FROM t ) ORDER BY dt ;
우선은, 순위 부여하는 쿼리 작성했는데요.
혹시 순위가 최종 목적이 아니라면?
1등의 이름과 꼴등의 이름을 가져오고 싶은 거라면?
1등이나 꼴등이 2명 이상일 수도 있겠네요.
이 경우 어떤 형태로 결과를 표현을 해야 할지 고민해 보셔야 합니다.