白鲸鱼🐳
发布于

MIMIC-IV数据库, 判断是否多次入住ICU的患者是同一次入住ICU?

一、icustays表

 

ICU住院资讯(患者在ICU内的住院概要,比如进出ICU的时间)该文件记录了患者在重症监护室(ICU)的留观信息。

 

  • 此表记录了病患的ICU的住院资讯,包括入住和出院的时间、住院天数等
  • 记录患者进入和离开ICU的表格为icustays,这个表格中有两个时间较为重要,分别是intime和outtime,前者表示进入ICU的时间,后者表示离开ICU的时间。
  • 当然,如果患者在ICU死亡,那么dischartime、outtime和deathtime理论上就是同一个时间,但实际上会稍微有些出入,估计是由于录入不及时造成的;

 

 

  • subject_id:患者的唯一标识符。
  • hadm_id:入院号,表示患者的住院标识符。
  • stay_id:留观号,指患者在医院中的留观期间的唯一标识符。
  • first_careunit:首次护理单元,表示患者在住院期间所在的第一个护理单元。
  • last_careunit:最后护理单元,表示患者在住院期间所在的最后一个护理单元。
  • intime:入院时间,指患者入院的时间。
  • outtime:出院时间,表示患者出院的时间。
  • los:住院天数,表示患者在医院中的住院天数

以前取ICU相关的资料我们都需要到icustays里面把icustay_id取出来,不过现在要取的是stay_id了。intime和outtime大家都懂的,los是ICU住院时间

 

二、判断是否多次入住ICU的患者是同一次入住IC(结果显示全部都是。。。)

这段 SQL 代码的作用是判断是否有多次入住 ICU 的患者是同一次入住 ICU

  • 具体来说,代码首先使用了一个 CTE(Common Table Expression)语句,将 `mimiciv_icu.icustays` 表中的数据按照 `hadm_id` 分组,并按照 `intime` 排序,然后为每个分组中的记录分配一个序号 `icu_count`,
  • 同时使用 `LAG` 函数获取前一个记录的 `outtime` 值,存储在 `outtime_change` 列中。
  • 接下来,代码使用了另一个 CTE 语句,将第一个 CTE 语句中的结果作为输入,计算每个记录是否属于同一次入住 ICU。
  • 具体来说,对于每个记录,如果它是该 `hadm_id` 分组中的第一条记录,或者它的 `intime` 值等于前一个记录的 `outtime` 值,则将 `judge_the_same` 列设置为 1,否则设置为 0。
  • 最后,代码从第二个 CTE 语句的结果中选择 `judge_the_same` 列为 0 的记录,即多次入住 ICU 但不是同一次入住的记录。由于结果集为空,说明所有多次入住 ICU 的患者都是同一次入住 ICU。

2.1 为什么使用partition by, 而不是group by?

group by分组汇总后改变了表的行数,一行只有一个类别。而partiition by和rank函数不会减少原表中的行数。例如下面统计每个医院的人数。

这里主要两个作用

  • 同时具有分组和排序的功能
  • 不减少原表的行数

注意事项partition子句是可省略,省略就是不指定分组

2.2 为什么使用row_number,而不是rank 或者dense_rank?

专用窗口函数rank, dense_rank, row_number有什么区别呢?
它们的区别我举个例子,你们一下就能看懂:

 

select *,
   rank() over (order by intime desc) as rank_stay_order,
   dense_rank() over (order by intime desc) as dese_rank_stay_order,
   row_number() over (order by intime desc) as row_num_stay_order
from mimiciv_icu.icustays

得到结果:

我们把intime字段换成subject_id, 因为subject_id是有可能相同的

从上面的结果可以看出:
rank函数:这个例子中是7位,7位,9位,也就是如果有并列名次的行,会占用下一名次的位置。比如正常排名是1,2,3,4,但是现在前3名是并列的名次,结果是:1,1,1,4。 dense_rank函数:这个例子中是7位,7位,8位,也就是如果有并列名次的行,不占用下一名次的位置。比如正常排名是1,2,3,4,但是现在前3名是并列的名次,结果是:1,1,1,2。 row_number函数:这个例子中是7位,8位,9位,也就是不考虑并列名次的情况。比如前3名是并列的名次,排名是正常的1,2,3,4。 这三个函数的区别如下:

 

三、结论

以上代码判断是否多次入住ICU的患者是同一次入住ICU,结果显示全部都是。。。

也就意味着查和stay_id相关的参数时要转换成hadm_id来查,因为都是同一次入住ICU的,就是stay_id不同而已

MIMIC-IV,重症医学数据库介绍和使用说明

MIMIC数据库下载权限申请保姆级教程(上)

MIMIC数据库下载权限申请保姆级教程(下)

CITI 课程考试补充答案

​CITI 课程考试补充答案(二)

 

MIMIC数据库安装保姆级教程(上)

MIMIC数据库安装保姆级教程(下)

安装常见问题(一)

安装常见问题(二)

MIMIC-IV数据库安装常见问题(三)

MIMIC-IV数据库安装常见问题(四)

 

MIMIC数据库,常用查询指令SQL基础(一)

MIMIC数据库,常用查询SQL基础(二)

MIMIC数据库提取教程-提取某种疾病下的实验室指标

MIMIC数据库提取教程-提取某种疾病下的患者人口统计学指标

MIMIC数据库官方函数的安装与使用

手把手教会你认识跟安装MIMIC-IV物化视图

【重要】 MIMIC数据集直接下载!

Python连接MIMIC-IV数据库并图表可视化

MIMIC-IV数据库衍生表格mimic_derived配置和使用

MIMIC-IV 数据查询加速教程

MIMIC数据提取教程 - 如何提取外科患者信息

MIMIC数据提取教程 - 提取患者首次入ICU数据

MIMIC数据提取教程 - 官方提供的时间函数(一)

MIMIC-IV数据分析 - 使用Python进行心脏病案例分析

MIMIC-IV数据分析 - 使用Python进行心脏病案例分析(二)

MIMIC-IV数据分析 - 使用R语言探索icustay_detail视图

MIMIC数据提取教程 - 如何提取患者入ICU后第一个WBC和SpO2值

MIMIC数据提取教程 - 如何提取患有肥胖症疾病的患者?

MIMIC数据提取教程 - 提取入住ICU第一天生命体征(血氧饱和度、血压、呼吸、体温)

MIMIC数据提取教程 - 提取血管紧张素受体阻滞剂(ARB)药物

MIMIC-IV数据库,如何提取器官衰竭AKI的尿量指标?

MIMIC-IV-ED适合科研小白的安装方法(提供数据集下载)

MIMIC-IV-ED数据集介绍

MIMIC数据库, 使用Python研究万古霉素的剂量 (一)

MIMIC-IV数据库, 如何提取患者ICU生存时间?

MIMIC-IV官方视图解析 - cardiac_marker心脏标记表

MIMIC-IV官方视图解析-序贯器官衰竭评分(SOFA)

MIMIC-IV官方视图解析-格拉斯哥昏迷评分(GCS)

浏览 (53)
点赞
收藏
评论