2017-01-26 9 views
-1

手術の前と後に患者の最新の検査結果を取得しようとしています。我々は彼のヘモグロビンを取得したい....最新の活動を選択する

ラボテーブルは、彼の研究室が Problem_list_cnは、この例では、ちょうど

enter image description here

SELECT L.RESULT_DE 
FROM LAB L INNER JOIN PROBLEM_LIST_CN PL 
ON L.PATID_CD = PL.PAT_ID 
WHERE L.PROCEDURE_DE = 'HEMOGLOBIN' 
AND L.COLLECTION_DT = (SELECT (MAX L.COLLECTION_DT) FROM LAB L2 WHERE L2.COLLECTION_DT < PL.NOTED_DATE) As HEMOG_BEFORE; 
/

前のためにある彼のsugery

/を示すであろう結果を示します

+0

http://meta.stackoverflow.com/questions/285551あなたの望む結果の代わりに何を得ているのですか?/ 285557#285557 –

+0

あなたの望む結果の代わりに何を得ていますか? – salvolds

+0

'LAG()'と 'LEAD()'解析関数を調べるべきです。 – Boneist

答えて

0

が、このような何か:

SELECT L.PATID_CD, 
     MAX(L.RESULT_DE) 
     KEEP (DENSE_RANK LAST ORDER BY CASE WHEN L.COLLECTION_DT < PL.NOTED_DATE 
               THEN L.COLLECTION_DT END NULLS FIRST) 
     AS HEMOG_BEFORE, 
     MAX(CASE WHEN L.COLLECTION_DT < PL.NOTED_DATE THEN L.COLLECTION_DT END) 
     AS DATE_TAKEN_BEFORE, 
     MAX(L.RESULT_DE) 
     KEEP (DENSE_RANK FIRST ORDER BY CASE WHEN L.COLLECTION_DT >= PL.NOTED_DATE 
               THEN L.COLLECTION_DT END NULLS LAST) 
     AS HEMOG_AFTER, 
     MIN(CASE WHEN L.COLLECTION_DT >= PL.NOTED_DATE THEN L.COLLECTION_DT END) 
     AS DATE_TAKEN_AFTER 
FROM LAB L 
     INNER JOIN PROBLEM_LIST_CN PL 
     ON (L.PATID_CD = PL.PAT_ID) 
WHERE L.PROCEDURE_DE = 'HEMOGLOBIN' 
GROUP BY L.PATID_CD; 

か:

SELECT * 
FROM (
    SELECT t.*, 
     ROW_NUMBER() OVER (PARTITION BY platin_cd ORDER BY date_after) AS rid 
    FROM (
    SELECT l.platin_cd, 
      LAG(l.result_de ) OVER (PARTITION BY l.platin_cd 
             ORDER BY collection_dt) AS hemog_before, 
      LAG(l.collection_dt) OVER (PARTITION BY l.platin_cd 
             ORDER BY collection_dt) AS date_before, 
      l.result_de AS hemog_after, 
      l.collection_dt AS date_after, 
      pl.noted_date 
    FROM LAB L 
      INNER JOIN PROBLEM_LIST_CN PL 
      ON (L.PATID_CD = PL.PAT_ID) 
    WHERE L.PROCEDURE_DE = 'HEMOGLOBIN' 
) 
    WHERE date_after >= noted_date 
) 
WHERE rid = 1; 
0

フィールドLAB.PATID_CDに患者のIDが含まれていると仮定すると、次のようにクエリを変更する必要があります(PATID_CDのサブクエリにも参加する必要があります)。私はMAX関数の括弧も小さな補正を追加しました。

任意のサンプルデータ、テストするのが難しいなし
SELECT L.RESULT_DE 
    FROM LAB L INNER JOIN PROBLEM_LIST_CN PL 
    ON L.PATID_CD = PL.PAT_ID 
    WHERE L.PROCEDURE_DE = 'HEMOGLOBIN' 
    AND L.COLLECTION_DT = (SELECT (MAX (L.COLLECTION_DT) FROM LAB L2 WHERE L2.COLLECTION_DT < PL.NOTED_DATE AND L2.PATID_CD=l.PATID_CD) As HEMOG_BEFORE; 
関連する問題