简体   繁体   中英

Rank over partition in Oracle SQL

somehow Im getting data for before(BLAB)... but no data for after(ALAB)....
So a patient usually gets a lab before the procedure and after the procedure My code was able to capture teh Before but not the after....

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;  

在此处输入图片说明

如果要引用行的显示顺序,则需要一个ORDER BY子句

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM