首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只为三种事件类型选择ID

只为三种事件类型选择ID
EN

Stack Overflow用户
提问于 2018-08-31 16:25:51
回答 1查看 42关注 0票数 1

我有个活动桌。它包含多个subject_ids和hadm_ids的几种类型的事件。例如,它在“事件标签”HRy下包含心脏节律事件。

我想选择subject_ids和hadm_ids,对于事件标签HRy,它们要么值'SR‘,要么包含'SB’或'ST‘。带有事件标签HRy的其他值的主题被丢弃。这意味着,如果病人的事件标签HRy不是'SR','SB‘或'ST',他们就会被丢弃。如果他们有所有的'SR‘,所有的’某人‘或所有'ST',这都是好的。如果他们把这3种混合在一起,那就很好了。还有其他类型的事件(例如BP),但它们并不重要。

下面是一个包含预期输出的示例表:

代码语言:javascript
复制
drop table testevents cascade;
create table testevents(
hadm_id int not null,
subject_id int not null,
eventtype int not null,
eventlabel char(30) not null,
value char(360) not null,
valuenum int
);

insert into testevents(hadm_id, subject_id, eventtype, eventlabel, value, valuenum)
values
    (1, 1, 220048, 'HRy', 'SR', null),
    (1, 1, 220048, 'HRy', 'SR', null),
    (1, 1, 220048, 'HRy', 'SR', null),
    (1, 1, 220048, 'HRy', 'SR', null),
    (1, 1, 220048, 'HRy', 'SR', null),
    (1, 1, 220048, 'HRy', 'SR', null),   --all good here: SR all the time

    (2, 2, 220048, 'HRy', 'SR', null),
    (2, 2, 220048, 'HRy', 'SR', null),
    (2, 2, 220048, 'HRy', 'SR', null),
    (2, 2, 220048, 'HRy', 'ST', null),
    (2, 2, 220048, 'HRy', 'SR', null),
    (2, 2, 220048, 'HRy', 'ST', null),  --all good here: either SR or ST, both allowed

    (3, 3, 220048, 'HRy', 'ST', null),
    (3, 3, 220048, 'HRy', 'ST', null),
    (3, 3, 220048, 'HRy', 'ST', null),
    (3, 3, 220048, 'HRy', 'ST', null),
    (3, 3, 220048, 'HRy', 'ST', null),
    (3, 3, 220048, 'HRy', 'ST', null),   --all good here: ST all the time
    (3, 3, 4053, 'BP', '87', 87),        --it contains another type of event, which doesn't matter

    (4, 4, 220048, 'HRy', 'ST', null),
    (4, 4, 220048, 'HRy', 'ST', null),
    (4, 4, 220048, 'HRy', 'AF', null),  --Here we have AF, which is not allowed. 
    (4, 4, 220048, 'HRy', 'ST', null),
    (4, 4, 220048, 'HRy', 'ST', null),
    (4, 4, 220048, 'HRy', 'SR', null),   
    (4, 4, 4053, 'BP', '87', 87),        

    (5, 5, 220048, 'HRy', 'SB', null),
    (5, 5, 220048, 'HRy', 'ST', null),
    (5, 5, 220048, 'HRy', 'SR', null),  --Here we have the 3 different types, all alowed. 
    (5, 5, 220048, 'HRy', 'SB', null),
    (5, 5, 220048, 'HRy', 'SR', null),
    (5, 5, 220048, 'HRy', 'SR', null),   
    (5, 5, 4053, 'BP', '87', 87),        

    (6, 6, 220048, 'HRy', 'SR', null), -- allowed
    (6, 6, 211, 'HRa2', '134', 134), -- doesn't matter
    (6, 6, 211, 'HRa2', '187', 187), -- doesn't matter
    (6, 6, 220048, 'HRy', 'AF', null), -- NOT allowed
    (6, 6, 220048, 'HRy', 'SR', null) -- allowed
;


output:
hadm_id, subject_id
1            1
2            2
3            3
5            5

我怎样才能做到这一点?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-31 17:23:31

有一种方法可以做到:

代码语言:javascript
复制
SELECT hadm_id, subject_id
FROM testevents
WHERE eventlabel = 'HRy'
GROUP BY hadm_id, subject_id
HAVING ARRAY_AGG(DISTINCT TRIM(value)) <@ ARRAY['SR', 'SB', 'ST']
ORDER BY hadm_id, subject_id

返回:

获取每个hadm_id和subject_id的所有不同值,并检查它们是否都包含在允许值的数组中。修剪是因为char(360)类型,它用空格填充值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52119481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档