2017-02-10 3 views
0

어떻게 든 이전에 (BLAB) 데이터를 가져 오는 중 ... (ALAB) ...
에 대한 데이터가 없습니다. 따라서 환자는 일반적으로 프로 시저 전에 프로 시저를 얻었고 프로 시저 후에는 당신이 당신의 행이 표시되는 순서를 참조하는 경우 내 코드가오라클 SQL의 파티션 위에 오름차순

WITH BLAB AS 
(
    SELECT /*+PARALLEL*/ 
     PAT.PATID_CD, 
     PAT.NOTED_DT, 
     LAB.COLLECTION_DT, 
     LAB.RESULT_DE, 
     LAB.UNI_LAB_CD, 
     LAB.PROCEDURE_DE, 
     RANK() OVER (PARTITION BY LAB.PATID_CD, PAT.NOTED_DT ORDER BY LAB.COLLECTION_DT DESC) AS RNK 
    FROM KPHC_PROBLEM_LIST_CN PAT 
    LEFT OUTER JOIN LAB 
     ON 
     PAT.PATID_CD = LAB.PATID_CD 
     AND LAB.REGION_CD = PAT.REGION_CD 
     AND LAB.REGION_CD ='CN' 
     AND LAB.COLLECTION_DT BETWEEN TO_DATE ('01-JAN-12') AND TO_DATE ('01-JAN-16') 
     AND (PROCEDURE_DE LIKE '%EGFR%' 
      OR PROCEDURE_DE LIKE '%INR%' 
      OR PROCEDURE_DE LIKE '%HEMOG%' 
      OR PROCEDURE_DE LIKE '%HEMATR%' 
      OR PROCEDURE_DE LIKE '%PLATE%' 
      OR PROCEDURE_DE LIKE '%CRCL%' 
      OR PROCEDURE_DE LIKE '%CREATI%' 
      OR PROCEDURE_DE LIKE '%PTT%' 
      OR PROCEDURE_DE LIKE '%ANTI-XA%') 
     AND LAB.COLLECTION_DT < PAT.NOTED_DT 
) 
, ALAB AS 
(
    SELECT /*+PARALLEL*/ 
     PAT.PATID_CD, 
     PAT.NOTED_DT, 
     LAB.COLLECTION_DT, 
     LAB.RESULT_DE, 
     LAB.UNI_LAB_CD, 
     LAB.PROCEDURE_DE, 
     RANK() OVER (PARTITION BY LAB.PATID_CD, PAT.NOTED_DT ORDER BY LAB.COLLECTION_DT ASC) AS RNK 
    FROM KPHC_PROBLEM_LIST_CN PAT 
    LEFT OUTER JOIN LAB 
     ON 
     PAT.PATID_CD = LAB.PATID_CD 
     AND LAB.REGION_CD = PAT.REGION_CD 
     AND LAB.REGION_CD ='CN' 
     AND LAB.COLLECTION_DT BETWEEN TO_DATE ('01-JAN-12') AND TO_DATE ('01-JAN-16') 
     AND LAB.UNI_LAB_CD = 'HGB_' 
     AND (PROCEDURE_DE LIKE '%EGFR%' 
      OR PROCEDURE_DE LIKE '%INR%' 
      OR PROCEDURE_DE LIKE '%HEMOG%' 
      OR PROCEDURE_DE LIKE '%HEMATR%' 
      OR PROCEDURE_DE LIKE '%PLATE%' 
      OR PROCEDURE_DE LIKE '%CRCL%' 
      OR PROCEDURE_DE LIKE '%CREATI%' 
      OR PROCEDURE_DE LIKE '%PTT%' 
      OR PROCEDURE_DE LIKE '%ANTI-XA%') 
     AND LAB.COLLECTION_DT > PAT.NOTED_DT 
) 
SELECT /*+PARALLEL*/ 
    BLAB.PATID_CD, 
    BLAB.NOTED_DT  AS PROCEDURE_DATE, 
    BLAB.PROCEDURE_DE AS LAB_TYPE, 
    BLAB.COLLECTION_DT AS DATE_TAKEN_AFTER, 
    BLAB.RESULT_DE  AS LAB_BEFORE, 
    ALAB.COLLECTION_DT AS DATE_TAKE_AFTER, 
    ALAB.RESULT_DE  AS LAB_AFTER 
FROM 
    ALAB, 
    BLAB 
WHERE 
    ALAB.PATID_CD = BLAB.PATID_CD 
    AND ALAB.NOTED_DT = BLAB.NOTED_DT 
    AND ALAB.RNK = 1 
    AND BLAB.RNK = 1; 

enter image description here

+1

제공 샘플 데이터 및 예상 출력. 결과 세트에 누락 된 데이터는 무엇인지 명확하지 않습니다. – Serg

+0

안녕 Serg ... 감사 결과를 게시했습니다 .... – LEARNDATAsCI

+0

바로 ALAB의 LEFT JOIN은 LAB에서 일치하는 데이터를 찾지 못합니다. 그럼에도 불구하고'RANK() OVER (PARTITION BY NULL ORDER BY NULL)'은 1을 리턴한다. – Serg

답변

-1

....가 아니라 후 전에 TEH을 포착 할 수 있었다, 당신은 ORDER BY 절을 필요