안녕하세요.
집계함수 관련 문의 드립니다.
아래와 같은 데이터가 있습니다.
create table test (empno number, regdt varchar2(20));
insert into test values (1, '201506');
insert into test values (1, '201506');
insert into test values (2, '201507');
insert into test values (1, '201508');
insert into test values (1, '201508');
insert into test values (2, '201508');
insert into test values (3, '201509');
insert into test values (2, '201510');
insert into test values (1, '201510');
사원 별 날짜 별 로그인 이력이구요,
앞의 number 형이 사원번호, 뒤의 date가 로그인 날짜 입니다.
하루에 동일 사원이 여러번 로그인 해도 동일 기록이 여러번 남게 되구요....
이 데이터로,
날짜 별 유니크한 사원 수,
날짜 까지의 유니크한 사원의 누적 총 수
를 어떻게 구할 수 있을까요?
예를 들어 위 데이터의 경우 아래와 같은 결과를 얻고 싶습니다~
날짜 | 일 단위 로그인한 유니크 사원 수 | 누적 유니크 총 사원 수 |
201506 | 1 | 1 |
201507 | 2 | 2 |
201508 | 2 | 2 |
201509 | 1 | 3 |
201510 | 2 | 3 |
일 단위 로그인한 유니크 사원 수는 아래와 같은 쿼리로 쉽게 뽑겠는데,
select moddttm, count(distinct empno) as uniq_emp_cnt,
from test
group by regdt
order by regdt
;
누적 유니크 총 사원 수는 어렵네요~~~
고수님들 한 수 부탁 드립니다~~~
감사합니다.
http://www.gurubee.net/lecture/2673
참조하시면, 쉽게해결하실 수 있을겁니다~
-- 억지로 만들어 봤네요;; select aa.regdt,cnt,sum(gb) over(order by aa.regdt) cnt2 from ( select regdt,count(distinct empno) cnt from test group by regdt) aa,(select distinct regdt,decode(empno,null,0,1) gb from test a where not exists (select 1 from test b where a.regdt > b.regdt and A.EMPNO = b.empno)) bb where aa.regdt = bb.regdt (+) order by aa.regdt;