如何检查两个单元格是否具有相同的值?

时间:2018-09-07 16:18:16

标签: sql postgresql

我正在使用PSQL查询数据库。我正在使用两个通过d_items链接的表(charteventsitemid)。

以下代码

    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)

输出:

Excel (链接:https://i.imgur.com/trGnwe5.png

我只想保留同时包括收缩压和舒张压的测量值。因此,实际上,每个(唯一的)图表时间都必须同时具有两者。我该如何实现?

2 个答案:

答案 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)  在...

我将把剩下的工作留给您完成查询。