很抱歉,没有一个更好的标题,如果有人知道我试图做的SQL行话,使它可以谷歌,我会改变它。
我有一家医院的下表。
subject_id | hadm_id | icd9_code
------------+---------+-----------
3 | 145834 | 5849
3 | 145834 | 4280
9 | 150750 | 5849
9 | 150750 | 4019
9 | 150750 | 4280
12 | 112213 | 4019
13 | 143045 | 4019
13 | 143045 | 25000
13 | 143045 | 41401
17 | 161087 | 2724
17 | 194023 | 2724
在这里,subject_id
是病人特有的,而hadm_id
是唯一住院的病人(住院时间)。每个icd9_code
代表一种疾病。因此,例如,第3名患者在他们唯一的住院期间被诊断患有两种疾病(5849和4280)。
我得到了一份疾病代码列表,我需要返回至少被诊断为,所有这些疾病的病人的名单。
请注意,对同一病人的诊断可能会重复进行(在本例中,病人17在两次不同的住院时间被诊断为2724次疾病)。
发布于 2018-04-18 13:49:02
为此,可以使用Postgres的数组处理:
select subject_id
from the_table
group by subject_id
having array_agg(distinct icd9_code) @> array[4280, 5849];
array_agg()
收集每个subject_id的所有代码,运算符@>
检查该数组是否包含来自其他表达式的所有元素。
发布于 2018-04-18 13:49:18
您可以使用给定的疾病列表对患者进行筛选,并检查疾病的不同计数是否与所提供的每次停留的列表计数相匹配:
select subject_id, hadm_id
from your_table
where icd9_code in (5849, 5850, 5851)
group by subject_id, hadm_id
having count(distinct icd9_code) = 3;
https://stackoverflow.com/questions/49901340
复制相似问题