> 구하고자 하는 값 : 어떤 환자가 진료를 받고 있을때, 접수후 대기중인 대기인원이 몇명이였는지 (대기인원 컬럼)
> 특이사항 : 접수시간은 불특정하게 발생하므로, 초단위이하까지 미세한 텀이 발생할 수 있으므로, 어느 행까지를 대기인원으로 참고하겠다 라는 정의가 어렵다
> 쿼리
SELECT 환자명,접수시간,진료시작,진료완료,
NEXT_1,NEXT_2,NEXT_3,NEXT_4,NEXT_5,NEXT_6,NEXT_7,NEXT_8,NEXT_9,
CASE WHEN 진료완료 > NEXT_12 THEN 12
WHEN 진료완료 > NEXT_11 THEN 11
WHEN 진료완료 > NEXT_10 THEN 10
WHEN 진료완료 > NEXT_9 THEN 9
WHEN 진료완료 > NEXT_8 THEN 8
WHEN 진료완료 > NEXT_7 THEN 7
WHEN 진료완료 > NEXT_6 THEN 6
WHEN 진료완료 > NEXT_5 THEN 5
WHEN 진료완료 > NEXT_4 THEN 4
WHEN 진료완료 > NEXT_3 THEN 3
WHEN 진료완료 > NEXT_2 THEN 2
WHEN 진료완료 > NEXT_1 THEN 1 ELSE 0 END 대기인원
FROM (SELECT 환자명,접수시간,STARTTIME,진료완료,
LEAD(접수시간,1) OVER (PARTITION BY 병원명 ORDER BY 접수시간) NEXT_1,
LEAD(접수시간,2) OVER (PARTITION BY 병원명 ORDER BY 접수시간) NEXT_2,
LEAD(접수시간,3) OVER (PARTITION BY 병원명 ORDER BY 접수시간) NEXT_3,
LEAD(접수시간,4) OVER (PARTITION BY 병원명 ORDER BY 접수시간) NEXT_4,
LEAD(접수시간,5) OVER (PARTITION BY 병원명 ORDER BY 접수시간) NEXT_5,
LEAD(접수시간,6) OVER (PARTITION BY 병원명 ORDER BY 접수시간) NEXT_6,
LEAD(접수시간,7) OVER (PARTITION BY 병원명 ORDER BY 접수시간) NEXT_7,
LEAD(접수시간,8) OVER (PARTITION BY 병원명 ORDER BY 접수시간) NEXT_8,
LEAD(접수시간,9) OVER (PARTITION BY 병원명 ORDER BY 접수시간) NEXT_9
FROM 진료차트
WHERE 1=1
AND 접수시간 >= TO_DATE('20170512 05','YYYYMMDD HH24')
AND 접수시간 < TO_DATE('20170512 06','YYYYMMDD HH24')
ORDER BY 진료시작,접수시간)
ORDER BY 진료시작, 접수시간
SELECT a.환자명 , a.접수시간 , a.진료시작 , a.진료완료 , COUNT(b.환자명) 대기인원 FROM 진료차트 a -- 기준(환자) , 진료차트 b -- 비교(대기) WHERE 1=1 AND a.접수시간 >= TO_DATE('20170512 05', 'yyyymmdd hh24') AND a.접수시간 < TO_DATE('20170512 06', 'yyyymmdd hh24') AND a.병원명 = b.병원명(+) AND a.접수시간 < b.접수시간(+) AND a.진료완료 > b.접수시간(+) GROUP BY a.병원명, a.환자명, a.접수시간, a.진료시작, a.진료완료 ORDER BY a.병원명, a.접수시간 ;