-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.sql
More file actions
393 lines (363 loc) · 8.75 KB
/
Copy pathschema.sql
File metadata and controls
393 lines (363 loc) · 8.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
------> Schema
-- Synthetic Data of mimic_demo
-- Patients
CREATE TABLE patients (
row_id INTEGER PRIMARY KEY,
subject_id INTEGER NOT NULL UNIQUE,
gender TEXT,
dob TEXT,
dod TEXT,
dod_hosp TEXT,
dod_ssn TEXT,
expire_flag INTEGER
);
-- Admissions
CREATE TABLE admissions (
row_id INTEGER PRIMARY KEY,
subject_id INTEGER NOT NULL,
hadm_id INTEGER NOT NULL UNIQUE,
admittime TEXT,
dischtime TEXT,
deathtime TEXT,
admission_type TEXT,
admission_location TEXT,
discharge_location TEXT,
insurance TEXT,
language TEXT,
religion TEXT,
marital_status TEXT,
ethnicity TEXT,
edregtime TEXT,
edouttime TEXT,
diagnosis TEXT,
hospital_expire_flag INTEGER,
has_chartevents_data INTEGER
);
-- ICU Stays
CREATE TABLE icustays (
row_id INTEGER PRIMARY KEY,
subject_id INTEGER NOT NULL,
hadm_id INTEGER NOT NULL,
icustay_id INTEGER NOT NULL UNIQUE,
dbsource TEXT,
first_careunit TEXT,
last_careunit TEXT,
first_wardid INTEGER,
last_wardid INTEGER,
intime TEXT,
outtime TEXT,
los REAL
);
-- Diagnoses ICD
CREATE TABLE diagnoses_icd (
row_id INTEGER PRIMARY KEY,
subject_id INTEGER NOT NULL,
hadm_id INTEGER NOT NULL,
seq_num INTEGER,
icd9_code TEXT
);
-- Procedures ICD
CREATE TABLE procedures_icd (
row_id INTEGER PRIMARY KEY,
subject_id INTEGER NOT NULL,
hadm_id INTEGER NOT NULL,
seq_num INTEGER,
icd9_code INTEGER
);
-- D_ICD_Diagnoses
CREATE TABLE d_icd_diagnoses (
row_id INTEGER PRIMARY KEY,
icd9_code TEXT,
short_title TEXT,
long_title TEXT
);
-- D_ICD_Procedures
CREATE TABLE d_icd_procedures (
row_id INTEGER PRIMARY KEY,
icd9_code INTEGER,
short_title TEXT,
long_title TEXT
);
-- D_Items
CREATE TABLE d_items (
row_id INTEGER PRIMARY KEY,
itemid INTEGER UNIQUE,
label TEXT,
abbreviation TEXT,
dbsource TEXT,
linksto TEXT,
category TEXT,
unitname TEXT,
param_type TEXT,
conceptid REAL
);
-- D_LabItems
CREATE TABLE d_labitems (
row_id INTEGER PRIMARY KEY,
itemid INTEGER UNIQUE,
label TEXT,
fluid TEXT,
category TEXT,
loinc_code TEXT
);
-- Chartevents
CREATE TABLE chartevents (
row_id INTEGER PRIMARY KEY,
subject_id INTEGER NOT NULL,
hadm_id INTEGER,
icustay_id REAL,
itemid INTEGER,
charttime TEXT,
storetime TEXT,
cgid INTEGER,
value TEXT,
valuenum REAL,
valueuom TEXT,
warning REAL,
error REAL,
resultstatus TEXT,
stopped TEXT
);
-- CPTEVENTS
CREATE TABLE cptevents (
row_id INTEGER PRIMARY KEY,
subject_id INTEGER NOT NULL,
hadm_id INTEGER,
costcenter TEXT,
chartdate TEXT,
cpt_cd INTEGER,
cpt_number INTEGER,
cpt_suffix REAL,
ticket_id_seq REAL,
sectionheader TEXT,
subsectionheader TEXT,
description TEXT
);
-- D_CPT
CREATE TABLE d_cpt (
row_id INTEGER PRIMARY KEY,
category INTEGER,
sectionrange TEXT,
sectionheader TEXT,
subsectionrange TEXT,
subsectionheader TEXT,
codesuffix TEXT,
mincodeinsubsection INTEGER,
maxcodeinsubsection INTEGER
);
-- Prescriptions
CREATE TABLE prescriptions (
row_id INTEGER PRIMARY KEY,
subject_id INTEGER NOT NULL,
hadm_id INTEGER NOT NULL,
icustay_id REAL,
startdate TEXT,
enddate TEXT,
drug_type TEXT,
drug TEXT,
drug_name_poe TEXT,
drug_name_generic TEXT,
formulary_drug_cd TEXT,
gsn REAL,
ndc REAL,
prod_strength TEXT,
dose_val_rx TEXT,
dose_unit_rx TEXT,
form_val_disp TEXT,
form_unit_disp TEXT,
route TEXT
);
-- Inputevents_CV
CREATE TABLE inputevents_cv (
row_id INTEGER PRIMARY KEY,
subject_id INTEGER NOT NULL,
hadm_id INTEGER NOT NULL,
icustay_id INTEGER,
charttime TEXT,
itemid INTEGER,
amount REAL,
amountuom TEXT,
rate REAL,
rateuom TEXT,
storetime TEXT,
cgid REAL,
orderid INTEGER,
linkorderid INTEGER,
stopped TEXT,
newbottle REAL,
originalamount REAL,
originalamountuom TEXT,
originalroute TEXT,
originalrate REAL,
originalrateuom TEXT,
originalsite TEXT
);
-- Inputevents_MV
CREATE TABLE inputevents_mv (
row_id INTEGER PRIMARY KEY,
subject_id INTEGER NOT NULL,
hadm_id INTEGER NOT NULL,
icustay_id INTEGER,
starttime TEXT,
endtime TEXT,
itemid INTEGER,
amount REAL,
amountuom TEXT,
rate REAL,
rateuom TEXT,
storetime TEXT,
cgid INTEGER,
orderid INTEGER,
linkorderid INTEGER,
ordercategoryname TEXT,
secondaryordercategoryname TEXT,
ordercomponenttypedescription TEXT,
ordercategorydescription TEXT,
patientweight REAL,
totalamount REAL,
totalamountuom TEXT,
isopenbag INTEGER,
continueinnextdept INTEGER,
cancelreason INTEGER,
statusdescription TEXT,
comments_editedby TEXT,
comments_canceledby TEXT,
comments_date TEXT,
originalamount REAL,
originalrate REAL
);
-- Outputevents
CREATE TABLE outputevents (
row_id INTEGER PRIMARY KEY,
subject_id INTEGER NOT NULL,
hadm_id INTEGER,
icustay_id REAL,
charttime TEXT,
itemid INTEGER,
value REAL,
valueuom TEXT,
storetime TEXT,
cgid INTEGER,
stopped REAL,
newbottle REAL,
iserror REAL
);
-- Labevents
CREATE TABLE labevents (
row_id INTEGER PRIMARY KEY,
subject_id INTEGER NOT NULL,
hadm_id REAL,
itemid INTEGER,
charttime TEXT,
value TEXT,
valuenum REAL,
valueuom TEXT,
flag TEXT
);
-- Microbiologyevents
CREATE TABLE microbiologyevents (
row_id INTEGER PRIMARY KEY,
subject_id INTEGER NOT NULL,
hadm_id INTEGER,
chartdate TEXT,
charttime TEXT,
spec_itemid INTEGER,
spec_type_desc TEXT,
org_itemid REAL,
org_name TEXT,
isolate_num REAL,
ab_itemid REAL,
ab_name TEXT,
dilution_text TEXT,
dilution_comparison TEXT,
dilution_value REAL,
interpretation TEXT
);
-- Procedureevents_MV
CREATE TABLE procedureevents_mv (
row_id INTEGER PRIMARY KEY,
subject_id INTEGER NOT NULL,
hadm_id INTEGER,
icustay_id INTEGER,
starttime TEXT,
endtime TEXT,
itemid INTEGER,
value INTEGER,
valueuom TEXT,
location TEXT,
locationcategory TEXT,
storetime TEXT,
cgid INTEGER,
orderid INTEGER,
linkorderid INTEGER,
ordercategoryname TEXT,
secondaryordercategoryname REAL,
ordercategorydescription TEXT,
isopenbag INTEGER,
continueinnextdept INTEGER,
cancelreason INTEGER,
statusdescription TEXT,
comments_editedby TEXT,
comments_canceledby TEXT,
comments_date TEXT
);
-- Drgcodes
CREATE TABLE drgcodes (
row_id INTEGER PRIMARY KEY,
subject_id INTEGER NOT NULL,
hadm_id INTEGER,
drg_type TEXT,
drg_code INTEGER,
description TEXT,
drg_severity INTEGER,
drg_mortality INTEGER
);
------> Views
-- What are the patients whole summaries?
-- How long they live how many time they spend in hospital?
-- The view that represent the whole patient summary
CREATE VIEW patient_summary AS
SELECT
ad.row_id,
ad.subject_id,
pt.gender,
ad.hospital_expire_flag,
pt.expire_flag,
-- Age capped at 89 (due to de-identification)
CASE
WHEN ROUND((julianday(ad.admittime) - julianday(pt.dob)) / 365, 2) > 89
THEN 89
ELSE ROUND((julianday(ad.admittime) - julianday(pt.dob)) / 365, 2)
END AS age,
-- Lifespan: cap unrealistic values, ignore if dod is null
CASE
WHEN pt.dod IS NULL THEN NULL
WHEN ROUND((julianday(pt.dod) - julianday(pt.dob)) / 365, 2) > 120 THEN 120
WHEN ROUND((julianday(pt.dod) - julianday(pt.dob)) / 365, 2) < 0 THEN NULL
ELSE ROUND((julianday(pt.dod) - julianday(pt.dob)) / 365, 2)
END AS life_span,
-- LOS in hours and days (with COALESCE)
COALESCE(ROUND((julianday(ad.dischtime) - julianday(ad.admittime)) * 24, 2), 0) AS spend_hours_in_hosp,
COALESCE(ROUND((julianday(ad.dischtime) - julianday(ad.admittime)), 2), 0) AS spend_days_in_hosp
FROM admissions AS ad
JOIN patients AS pt
ON ad.subject_id = pt.subject_id;
---------> Indexes
-- 1. Index by ICU stay (most common join key)
CREATE INDEX idx_outputevents_icustay
ON outputevents (icustay_id);
-- 2. Index by hospital admission (sometimes used for joins)
CREATE INDEX idx_outputevents_hadm
ON outputevents (hadm_id);
-- 3. Index by patient subject (for patient-level analysis)
CREATE INDEX idx_outputevents_subject
ON outputevents (subject_id);
-- 4. Index by charttime (for time-series queries)
CREATE INDEX idx_outputevents_charttime
ON outputevents (charttime);
-- 5. Index by valueuom
CREATE INDEX value_index
ON chartevents (valueuom);
--6. Index by valuenum
CREATE INDEX value_index_num
ON chartevents (valuenum);