2017-01-26 2 views
-1

Im пытается получить последний лабораторный результат пациента до операции и после; мы хотим получить его гемоглобин ....Выбор последней активности

стол Lab покажет его лаборатории результаты Problem_list_cn бы показать свою sugery

/этот пример только для перед тем/

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; 

enter image description here

+0

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-ask-a-question/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 содержит идентификатор пациента, вы должны изменить свой запрос следующим образом (например, присоединить подзапрос к 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; 

 Смежные вопросы

  • Нет связанных вопросов^_^