좀더 간략하게 query를 만들 수 있을까요~? 0 2 1,067

by 뽀꼼여사 [SQL Query] SQL_ORACLE [2017.05.12 16:08:14]


 

> 구하고자 하는 값 : 어떤 환자가 진료를 받고 있을때, 접수후 대기중인 대기인원이 몇명이였는지 (대기인원 컬럼)

> 특이사항 : 접수시간은 불특정하게 발생하므로, 초단위이하까지 미세한 텀이 발생할 수 있으므로, 어느 행까지를 대기인원으로 참고하겠다 라는 정의가 어렵다

> 쿼리

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 진료시작, 접수시간

 

by 마농 [2017.05.12 16:37:27]
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.접수시간
;

 


by 뽀꼼여사 [2017.05.15 14:01:01]

감사합니다~~!!!엄청 간단하고 깔끔하게 되었네요^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입