簡體   English   中英

在Oracle SQL中對分區進行排名

[英]Rank over partition in Oracle SQL

我以某種方式獲取了之前(BLAB)的數據...但是沒有了之后(ALAB)的數據....
因此,患者通常會在手術之前和之后進行實驗室檢查。我的代碼能夠捕獲之前但之后的信息。...

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子句

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM