@@ -6,8 +6,8 @@ CREATE SEQUENCE {TARGET_SCHEMA}.sequence_vo INCREMENT 1;
6
6
SELECT setval(' {TARGET_SCHEMA}.sequence_vo' , (SELECT max_id from {TARGET_SCHEMA_TO_LINK}._max_ids WHERE lower (tbl_name) = ' visit_occurrence' ));
7
7
8
8
with cte1 AS (
9
- SELECT person_id
10
- FROM {TARGET_SCHEMA}.person
9
+ SELECT person_id, observation_period_start_date, observation_period_end_date
10
+ FROM {TARGET_SCHEMA}.observation_period
11
11
),
12
12
cte2 AS (
13
13
SELECT t2 .spno , MIN (t2 .epistart ) AS date_min, MAX (t2 .epiend ) AS date_max
@@ -17,7 +17,7 @@ cte2 AS (
17
17
),
18
18
cte3 AS (
19
19
SELECT
20
- NEXTVAL(' {TARGET_SCHEMA}.sequence_vo' ) AS visit_occurrence_id,
20
+ -- NEXTVAL('{TARGET_SCHEMA}.sequence_vo') AS visit_occurrence_id,
21
21
t1 .patid AS person_id,
22
22
9201 AS visit_concept_id,
23
23
COALESCE(t1 .admidate , t3 .date_min , t1 .discharged ) AS visit_start_date,
@@ -39,7 +39,7 @@ cte3 AS (
39
39
LEFT JOIN cte2 as t3 ON t1 .spno = t3 .spno
40
40
LEFT JOIN {VOCABULARY_SCHEMA}.source_to_standard_vocab_map as t4 on t1 .admimeth = t4 .source_code and t4 .source_vocabulary_id = ' HESAPC_ADMIMETH_STCM'
41
41
LEFT JOIN {VOCABULARY_SCHEMA}.source_to_standard_vocab_map as t5 on t1 .dismeth ::varchar = t5 .source_code and t5 .source_vocabulary_id = ' HESAPC_DISMETH_STCM'
42
- ORDER BY t1 .patid , COALESCE(t1 .admidate , t3 .date_min , t1 .discharged ), COALESCE(t1 .discharged , t3 .date_max , t3 .date_min ), t1 .spno
42
+ -- ORDER BY t1.patid, COALESCE(t1.admidate, t3.date_min, t1.discharged), COALESCE(t1.discharged, t3.date_max, t3.date_min), t1.spno
43
43
),
44
44
cte4 AS (
45
45
SELECT visit_occurrence_id,
@@ -58,9 +58,35 @@ cte4 AS (
58
58
FROM cte3
59
59
),
60
60
cte5 AS (
61
+ SELECT
62
+ NEXTVAL(' {TARGET_SCHEMA}.sequence_vo' ) AS visit_occurrence_id,
63
+ t1 .person_id ,
64
+ t1 .visit_concept_id ,
65
+ t2 .visit_start_date ,
66
+ t2 .visit_start_datetime ,
67
+ t2 .visit_end_date ,
68
+ t2 .visit_end_datetime ,
69
+ t1 .visit_type_concept_id ,
70
+ t1 .provider_id ,
71
+ t1 .care_site_id ,
72
+ t1 .visit_source_value ,
73
+ t1 .visit_source_concept_id ,
74
+ t1 .admitting_source_value ,
75
+ t1 .admitting_source_concept_id ,
76
+ t1 .discharge_to_source_value ,
77
+ t1 .discharge_to_concept_id ,
78
+ t1 .preceding_visit_occurrence_id
79
+ from cte3 as t1
80
+ inner join cte4 as t2 on t1 .person_id = t2 .person_id
81
+ inner join cte1 as t3 on t1 .person_id = t3 .person_id
82
+ WHERE t2 .visit_start_date >= t3 .observation_period_start_date
83
+ AND t2 .visit_end_date <= t3 .observation_period_end_date
84
+ ORDER BY t1 .person_id , t2 .visit_start_date , t2 .visit_end_date , t1 .visit_source_value
85
+ ),
86
+ cte6 AS (
61
87
SELECT t1 .person_id , t1 .visit_occurrence_id , MAX (t2 .visit_occurrence_id ) AS preceding_visit_occurrence_id
62
- FROM cte3 AS t1
63
- INNER JOIN cte3 AS t2 ON t1 .person_id = t2 .person_id
88
+ FROM cte5 AS t1
89
+ INNER JOIN cte5 AS t2 ON t1 .person_id = t2 .person_id
64
90
WHERE t1 .visit_occurrence_id > t2 .visit_occurrence_id
65
91
GROUP BY t1 .person_id , t1 .visit_occurrence_id
66
92
)
@@ -87,10 +113,10 @@ SELECT
87
113
t1 .visit_occurrence_id ,
88
114
t1 .person_id ,
89
115
t1 .visit_concept_id ,
90
- t2 .visit_start_date ,
91
- t2 .visit_start_datetime ,
92
- t2 .visit_end_date ,
93
- t2 .visit_end_datetime ,
116
+ t1 .visit_start_date ,
117
+ t1 .visit_start_datetime ,
118
+ t1 .visit_end_date ,
119
+ t1 .visit_end_datetime ,
94
120
t1 .visit_type_concept_id ,
95
121
t1 .provider_id ,
96
122
t1 .care_site_id ,
@@ -100,10 +126,10 @@ SELECT
100
126
t1 .admitting_source_concept_id ,
101
127
t1 .discharge_to_source_value ,
102
128
t1 .discharge_to_concept_id ,
103
- t3 .preceding_visit_occurrence_id
104
- FROM cte3 AS t1
105
- INNER JOIN cte4 AS t2 ON t1 .visit_occurrence_id = t2 .visit_occurrence_id
106
- LEFT JOIN cte5 AS t3 ON t1 .visit_occurrence_id = t3 .visit_occurrence_id ;
129
+ t2 .preceding_visit_occurrence_id
130
+ FROM cte5 AS t1
131
+ -- INNER JOIN cte5 AS t2 ON t1.visit_occurrence_id = t2.visit_occurrence_id
132
+ LEFT JOIN cte6 AS t2 ON t1 .visit_occurrence_id = t2 .visit_occurrence_id ;
107
133
108
134
DROP SEQUENCE IF EXISTS {TARGET_SCHEMA}.sequence_vo;
109
135
@@ -121,8 +147,8 @@ CREATE SEQUENCE {TARGET_SCHEMA}.sequence_vd INCREMENT 1;
121
147
SELECT setval(' {TARGET_SCHEMA}.sequence_vd' , (SELECT max_id from {TARGET_SCHEMA_TO_LINK}._max_ids WHERE lower (tbl_name) = ' visit_detail' ));
122
148
123
149
with cte1 AS (
124
- SELECT person_id
125
- FROM {TARGET_SCHEMA}.person
150
+ SELECT person_id, observation_period_start_date, observation_period_end_date
151
+ FROM {TARGET_SCHEMA}.observation_period
126
152
),
127
153
cte2 AS (
128
154
SELECT
@@ -285,6 +311,9 @@ cte8 AS (
285
311
t2 .visit_occurrence_id
286
312
FROM cte7 as t1
287
313
INNER JOIN {TARGET_SCHEMA}.visit_occurrence AS t2 ON t2 .visit_source_value ::bigint = t1 .spno and t2 .person_id = t1 .person_id
314
+ INNER JOIN cte1 as t3 ON t1 .person_id = t3 .person_id
315
+ WHERE t1 .visit_detail_start_date >= t3 .observation_period_start_date
316
+ AND t1 .visit_detail_start_date <= t3 .observation_period_end_date
288
317
ORDER BY t1 .person_id , t1 .visit_detail_start_date , t1 .visit_detail_source_value
289
318
),
290
319
cte9 AS (
@@ -354,4 +383,4 @@ ALTER TABLE {TARGET_SCHEMA}.visit_detail ADD CONSTRAINT xpk_visit_detail PRIMARY
354
383
CREATE INDEX idx_visit_detail_person_id ON {TARGET_SCHEMA}.visit_detail (person_id, visit_detail_source_value);
355
384
CLUSTER {TARGET_SCHEMA}.visit_detail USING idx_visit_detail_person_id;
356
385
CREATE INDEX idx_visit_detail_concept_id ON {TARGET_SCHEMA}.visit_detail (visit_detail_concept_id ASC );
357
- CREATE INDEX idx_visit_detail_occurrence_id ON {TARGET_SCHEMA}.visit_detail (visit_occurrence_id ASC );
386
+ CREATE INDEX idx_visit_detail_occurrence_id ON {TARGET_SCHEMA}.visit_detail (visit_occurrence_id ASC );
0 commit comments