Вы можете использовать оконные функции или 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
.