选择最近的 activity
Selecting the most recent activity
我正在尝试获取患者手术前后的最新化验结果;我们想得到他的血红蛋白....
Lab table 会显示他的实验室结果
Problem_list_cn 会展示他的手术
/此示例仅适用于之前/
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;
假设字段 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;
没有任何样本数据,很难测试,但是像这样:
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;
我正在尝试获取患者手术前后的最新化验结果;我们想得到他的血红蛋白....
Lab table 会显示他的实验室结果 Problem_list_cn 会展示他的手术
/此示例仅适用于之前/
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;
假设字段 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;
没有任何样本数据,很难测试,但是像这样:
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;