我正在使用PSQL查询数据库。我正在使用两个通过d_items
链接的表(chartevents
和itemid
)。
以下代码
select
subject_id, hadm_id, icustay_id
, di.itemid, di.label
, charttime, storetime
, value, valuenum, valueuom
, error, resultstatus
from chartevents ce
inner join d_items di
on ce.itemid = di.itemid
where subject_id BETWEEN 1 AND 10
and di.itemid in
(
8368, 51
)
order by subject_id, charttime, itemid)
输出:
(链接:https://i.imgur.com/trGnwe5.png)
我只想保留同时包括收缩压和舒张压的测量值。因此,实际上,每个(唯一的)图表时间都必须同时具有两者。我该如何实现?
答案 0 :(得分:1)
您可以使用窗口功能或exists
。因此,这是一种方法:
with t as (
select subject_id, hadm_id, icustay_id,
di.itemid, di.label,
charttime, storetime,
value, valuenum, valueuom,
error, resultstatus
from chartevents ce inner join
d_items di
on ce.itemid = di.itemid
where subject_id between 1 and 10 and
di.itemid in (8368, 51)
)
select t.*
from (select t.*,
sum( (itemid = 51):: int) over (partition by subject_id, charttime) as cnt_51,
sum( (itemid = 8368):: int) over (partition by subject_id, charttime) as cnt_8368
from t
) t
where cnt_51 > 0 and cnt_8368 > 0
order by subject_id, charttime, itemid;
我正在使用itemid
来识别这两个度量。您可能需要在like
上使用label
。
答案 1 :(得分:0)
我是使用Oracle的开发人员,但是,我认为我可以提供一些概念来为您提供帮助。
查看您的表,我认为表d_items只是用于标识
收缩压与舒张压的对比数据。所以我们可以忽略表
d_items。
我认为您的目标是在同一记录上显示收缩压和舒张压。
您想要做的就是针对自己加入表chartevents。我假设那个subject_id
并且chartime将定义一组唯一的记录。查看输出列,它看起来
像value和valuenum表示相同的数据。
您的表联接将如下所示: 选择... systol.value,diastol.value ... 来自chartevents systol 加入chartevents diastol 开启(systol.subject_id = diastol.subject_id 和systol.charttime = diastol.charttime) 在...
我将把剩下的工作留给您完成查询。