使用空值加入和最大日期

Posted

技术标签:

【中文标题】使用空值加入和最大日期【英文标题】:Join and max date with null values 【发布时间】:2021-04-07 09:35:23 【问题描述】:

我需要返回存在重要值的患者 ID 的最近(最大)日期 - 这不仅仅是最大值。对于 Patient_ID 的遇到日期,它必须具有相应的生命值。我也只想要生命体征值 '' 和日期 >= '2020-01-01' 和 vital_ID = 232268 的遭遇。

遭遇(enc)

Patient_ID Encounter_ID Date
1 11 1/4/2020
1 12 1/15/2020
1 13 3/6/2020
2 14 1/12/2020
3 15 3/16/2020
3 16 4/19/2020
4 17 6/2/2020
4 18 6/12/2020
4 19 9/1/2020

生命体征

Encounter_ID Vital_ID Value
11 232268 4.8
12 232268 4.6
14 232268 3.1
16 232268 3.2
17 232268 4.1
18 232268 4.7

期望的结果

Patient_ID Encounter_ID Date Value
1 12 3/6/2020 4.6
2 14 1/12/2020 3.1
3 16 4/19/2020 3.2
4 18 9/1/2020 4.7

我试过了,但它只返回了 vitals_encounter_ID IF it = max(date) for the patient_ID 1 一起,因为没有在遇到_ID 13 上进行生命体征:

select v.encounterID, e.patientID, e.date, v.value, v.vitalID 
from vitals v 
left join enc e on 
    e.encounterID = v.encounterID and 
    v.vitalID = 232268 and 
    v.value <> '' and
    e.date = (select max(date) from enc where patientID=e.patientID)
where e.date >= '2020-01-01'

Cognos 8。我是新手,所以请不要把我活生生吃掉......

【问题讨论】:

【参考方案1】:

如果我没听错的话,你需要相关子查询中的两个表:

select v.encounterid, e.patientid, e.date, v.value, v.vitalid 
from enc e 
inner join vitals v on v.encounterid = e.encounterid 
where 
    v.vitalid = 232268 
    and v.value <>'' 
    and e.date = (
        select max(e1.date) 
        from enc e1
        inner join vitals v1 on v1.encounterid = e1.encounterid 
        where 
            e1.patientid = e.patientid 
            and v1.vitalid = v.vitalid
            and v1.value <> ''
            and e.date >= '2020-01-01'
    )

我不知道 Cognos 是否支持窗口函数。但如果是这样,查询的措辞会更简单:

select *
from (
    select v.encounterid, e.patientid, e.date, v.value, v.vitalid,
        row_number() over(partition by e.patientid order by e.date)
    from enc e 
    inner join vitals v on v.encounterid = e.encounterid 
    where v.vitalid = 232268 and v.value <> ''
) t
where rn = 1

【讨论】:

以上是关于使用空值加入和最大日期的主要内容,如果未能解决你的问题,请参考以下文章

加入两个表,只显示唯一值和最大日期

基于最大日期 <= 给定日期加入

如何加入表格并按最大日期选择 [重复]

加入仅包括表中的最大日期 [重复]

Day01 基本SQL SELECT

如何使用空值将字符串转换为日期时间 - python,pandas?