2017-02-10 103 views
0

某种程度上,我正在获取之前(BLAB)的数据...但是没有数据(ALAB)....
因此,病人通常在手术前和手术后获得实验室 我的代码能够捕捉德前而不是后....Oracle 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

提供e xample数据和预期输出。目前尚不清楚,结果集中缺少哪些数据。 – Serg

+0

嗨Serg ...谢谢发布了一个结果.... – LEARNDATAsCI

+0

只是ALAB的'LEFT JOIN'在LAB中找不到匹配的数据。尽管如此,'RANK()OVER(通过空NULL分区)'返回1 – Serg

回答

-1

如果你指的是在你行的显示顺序,那么你需要一个ORDER BY条款