从 MIMIC-IV 重症监护数据库中提取数据的专用技能。当用户提到 MIMIC、MIMIC-IV、查询 MIMIC 数据、提取 ICU 患者数据(生命体征/实验室检查/诊断/合并症)且涉及 MIMIC 数据库时使用此技能。支持 SQL 和 Python (psycopg2) 两种查询方式,数据通过 Postgr...
Extract intensive care data from the MIMIC-IV database. Provides SQL templates and Python code; users handle database connections themselves.
Users provide their own PostgreSQL connection parameters. This skill only provides query code.
⚠️ If you have used MIMIC-III, please note the following changes!
MIMIC-III (❌ Deprecated)MIMIC-IV (✅ Correct Usage)Descriptionicustay_id``stay_idICU stay IDinputevents_mv``inputeventsInput events (merged mv and cv)inputevents_cv``inputeventsMerged into inputevents``procedureevents_mv``procedureeventsProcedure eventsdatetimeevents``datetimeeventsNew table (datetime events)ingredientevents``ingredienteventsNew table (drug ingredient events)
Table NameDescriptioningredienteventsDrug active ingredient eventsdatetimeeventsDatetime eventsemarElectronic medication administration recordemar_detailElectronic medication administration detailpoeProvider order entry recordspoe_detailProvider order entry detail
MIMIC-IV is now divided into 6 modules:
ModuleDescriptionMain TableshospHospital-level datapatients, admissions, labevents, diagnoses_icd, etc.icuICU-level dataicustays, chartevents, inputevents, etc.edEmergency department dataedstays, edcharting, etc.cxrChest X-ray metadatacxr_records, cxr_paths, etc.noteClinical notesdischarges, echos, etc.ecgECG dataecg_records, ecg_paths, etc.
✅ Correct (lowercase):
sql
SELECT ce.subject_id, ce.stay_id, ce.itemid, ce.charttime
FROM chartevents ce
WHERE ce.stay_id = 100001
❌ Incorrect (camelCase or old field names):
sql
SELECT ce.subjectId, ce.icustay_id -- Field does not exist!
FROM chartevents ce
Query TypeReference FileVital Signsreferences/vital_signs.mdLaboratory Testsreferences/labs.mdDiagnoses and Comorbiditiesreferences/diagnoses.mdDatabase Schemareferences/schema.mdCommon Query Templatesreferences/common_queries.md
stay_id as the ICU stay identifier ( not MIMIC-III's icustay_id)anchor_age is truncated (patients >89 are all set to 91)chartevents is linked via stay_id, labevents via hadm_iditemid comes from d_items (vital signs) and d_labitems (lab tests)TIMESTAMP type), time functions can be used directlysql
SELECT
ce.subject_id,
ce.stay_id,
ce.itemid,
di.label,
ce.charttime,
ce.valuenum,
ce.valueuom
FROM chartevents ce
INNER JOIN icustays ic ON ce.stay_id = ic.stay_id
INNER JOIN d_items di ON ce.itemid = di.itemid
WHERE ce.charttime >= ic.intime
AND ce.charttime < ic.intime + INTERVAL '1 day'
AND ce.itemid IN (220045, 220050, 220051, 220052, 223762, 220210, 220277, 223835)
AND ce.valuenum IS NOT NULL
ORDER BY ce.stay_id, ce.charttime;
sql
SELECT
le.subject_id,
le.hadm_id,
le.itemid,
dli.label,
le.charttime,
le.valuenum,
le.valueuom
FROM labevents le
INNER JOIN admissions a ON le.hadm_id = a.hadm_id
INNER JOIN d_labitems dli ON le.itemid = dli.itemid
WHERE le.charttime >= a.admittime
AND le.charttime < a.admittime + INTERVAL '1 day'
AND le.itemid IN (50912, 51006, 50983, 50971, 50902, 50882)
AND le.valuenum IS NOT NULL
ORDER BY le.subject_id, le.charttime;
sql
SELECT
d.subject_id,
d.hadm_id,
d.seq_num,
d.icd_code,
d.icd_version,
did.long_title
FROM diagnoses_icd d
LEFT JOIN d_icd_diagnoses did
ON d.icd_code = did.icd_code AND d.icd_version = did.icd_version
WHERE d.hadm_id = %(hadm_id)s
ORDER BY d.seq_num;
TIMESTAMP type (UTC timezone)EXTRACT, DATE_PART, INTERVALAT TIME ZONE for local time conversionsql
-- Convert to local time (e.g., Eastern Time)
SELECT charttime AT TIME ZONE 'America/New_York'
FROM chartevents
WHERE stay_id = 100001;
The chartevents table has hundreds of millions of rows; when querying, be sure to:
stay_idcharttime rangeLIMIT clause (for testing)EXPLAIN to analyze the query planvaluenum: Numeric results (for calculations)value: Text results (for qualitative results, e.g., "Positive", "Negative")sql
-- Correct: Use valuenum for numeric results
SELECT AVG(valuenum) AS avg_creatinine
FROM labevents
WHERE itemid = 50912 AND valuenum IS NOT NULL;
-- Correct: Use value for text results
SELECT COUNT(*) AS num_positive
FROM labevents
WHERE itemid = 500061 AND value = 'Positive';
Last Updated: 2026-05-20
Updated by: 悟空(基于 MIMIC-IV 官方文档修正)