加入空值和最大日期
Join and max date with null values
我需要 return patient_ID 的最近(最大)日期,其中存在生命值 - 它不仅仅是最大值。相遇日期为patient_ID,则必然有相应的生命值。我也只想遇到 vitals 值 <>'' 和日期 >= '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
我试过了,但是它 return 只编辑了 vitals_encounter_ID IF it = max(date) of the encounter for the patient_ID (所以不包括 patient_ID 如果 vitals 没有在 max(date) 上进行 - 例如,它否定 patient_ID 1 因为 vitals 没有在 encounter_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。我是新手,所以请不要生吃我...
如果我没听错,你需要相关子查询中的两个表:
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 是否支持 window 功能。但如果是这样,查询可以更简单的措辞:
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
我需要 return patient_ID 的最近(最大)日期,其中存在生命值 - 它不仅仅是最大值。相遇日期为patient_ID,则必然有相应的生命值。我也只想遇到 vitals 值 <>'' 和日期 >= '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 |
我试过了,但是它 return 只编辑了 vitals_encounter_ID IF it = max(date) of the encounter for the patient_ID (所以不包括 patient_ID 如果 vitals 没有在 max(date) 上进行 - 例如,它否定 patient_ID 1 因为 vitals 没有在 encounter_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。我是新手,所以请不要生吃我...
如果我没听错,你需要相关子查询中的两个表:
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 是否支持 window 功能。但如果是这样,查询可以更简单的措辞:
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