仅获取与某人关联的最新对象

hsvhsicv  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(316)

我的一道考题有点问题,我在考试中没有答对,但我想知道我遗漏了什么。
问题是:
列出每个患者的第一个诊断,显示患者的姓名、诊断代码和诊断日期。如果患者最早有两个或两个以上的诊断,可以只显示其中一个诊断。需要的表格:遭遇,病人,遭遇诊断,诊断。结果集应该有四行。
以下是我所拥有的:

select p.patient_nm, max(e.start_dts)
from edw_emr_ods.patients p
join edw_emr_ods.encounters e
on p.patient_id = e.patient_id
join edw_emr_ods.encounter_diagnoses ed
on e.encounter_id = ed.encounter_id
left join edw_emr_ods.diagnoses d
on ed.encounter_diagnoses_id = d.diagnosis_id
group by p.patient_nm
order by p.patient_nm asc

如您所见,我没有包括诊断代码(更多信息(稍后)返回4行:

当我尝试添加诊断代码时,我得到的“column'edw\u emr\u ods.diagnostics.code”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在group by子句中。”要删除它,唯一的方法是在group by中添加代码,因为没有它无法将代码和名称一起排序。但这会为每个患者返回太多行。

所以我的问题是“我如何只提取最近诊断的名字,日期和代码?”

nzk0hqpo

nzk0hqpo1#

为什么不使用 rownumber() over(...) 回答您的问题:“如何仅获取最近诊断的姓名、日期和代码:

SELECT * FROM (
select p.patient_nm, e.start_dts row_number() over(partition by ed.code,p.patient_nm order by e.start_dts desc) as rn

from edw_emr_ods.patients p
join edw_emr_ods.encounters e
on p.patient_id = e.patient_id
join edw_emr_ods.encounter_diagnoses ed
on e.encounter_id = ed.encounter_id
left join edw_emr_ods.diagnoses d
on ed.encounter_diagnoses_id = d.diagnosis_id ) AS T
WHERE rn =1

相关问题