/* beginning first_create persistent tables.sql*/ /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ IF OBJECT_ID( '@target_database_schema.bmi_covariates', 'U') IS NOT NULL DROP TABLE @target_database_schema.bmi_covariates; CREATE TABLE @target_database_schema.bmi_covariates ( person_id VARCHAR(10) NOT NULL , entry_name VARCHAR(255) NOT NULL , age_days INTEGER NOT NULL ) ; IF OBJECT_ID( '@target_database_schema.bmi_icd', 'U') IS NOT NULL DROP TABLE @target_database_schema.bmi_icd; CREATE TABLE @target_database_schema.bmi_icd ( person_id VARCHAR(10) NOT NULL , condition_source_concept_id int NOT NULL , age_days INTEGER NOT NULL ) ; ALTER TABLE OHDSI.dbo.bmi_icd ADD CONSTRAINT pk_bmi_icd PRIMARY KEY NONCLUSTERED (person_id,condition_source_concept_id,age_days); /* beginning antipsychotics_era.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (712615,40230761,800878,740275,990678,19017241,757688,703244,755695,735979,733008,40164052,766814,785788,792263,710062,19054761,19052551) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (712615,40230761,800878,740275,990678,19017241,757688,703244,755695,735979,733008,40164052,766814,785788,792263,710062,19054761,19052551) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Era Criteria select C.person_id, C.drug_era_id as event_id, C.drug_era_start_date as start_date, C.drug_era_end_date as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, CAST(NULL as bigint) as visit_occurrence_id, C.drug_era_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_ERA de where de.drug_concept_id in (SELECT concept_id from #Codesets where codeset_id = 0) ) C WHERE DATEDIFF(d,C.drug_era_start_date, C.drug_era_end_date) > 180 -- End Drug Era Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE WHERE QE.ordinal = 1 ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'antipsychotics_era'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'antipsychotics_era', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning antipsychotics_occurrence.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (712615,40230761,800878,740275,990678,19017241,757688,703244,755695,735979,733008,40164052,766814,785788,792263,710062,19054761,19052551) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (712615,40230761,800878,740275,990678,19017241,757688,703244,755695,735979,733008,40164052,766814,785788,792263,710062,19054761,19052551) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Exposure Criteria select C.person_id, C.drug_exposure_id as event_id, C.drug_exposure_start_date as start_date, COALESCE(C.drug_exposure_end_date, DATEADD(day, 1, C.drug_exposure_start_date)) as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.drug_exposure_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_EXPOSURE de JOIN #Codesets codesets on ((de.drug_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C -- End Drug Exposure Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'antipsychotics_occurrence'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'antipsychotics_occurrence', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning appetite_suppressants_era.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (723344,40170911,1714319,741530,719128,735340,725822,42873635,750982,19056823,19054298) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (723344,40170911,1714319,741530,719128,735340,725822,42873635,750982,19056823,19054298) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Era Criteria select C.person_id, C.drug_era_id as event_id, C.drug_era_start_date as start_date, C.drug_era_end_date as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, CAST(NULL as bigint) as visit_occurrence_id, C.drug_era_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_ERA de where de.drug_concept_id in (SELECT concept_id from #Codesets where codeset_id = 0) ) C WHERE DATEDIFF(d,C.drug_era_start_date, C.drug_era_end_date) > 180 -- End Drug Era Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE WHERE QE.ordinal = 1 ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'appetite_suppressants_era'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'appetite_suppressants_era', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning appetite_suppressants_occurrence.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (723344,40170911,1714319,741530,719128,735340,725822,42873635,750982,19056823,19054298) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (723344,40170911,1714319,741530,719128,735340,725822,42873635,750982,19056823,19054298) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Exposure Criteria select C.person_id, C.drug_exposure_id as event_id, C.drug_exposure_start_date as start_date, COALESCE(C.drug_exposure_end_date, DATEADD(day, 1, C.drug_exposure_start_date)) as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.drug_exposure_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_EXPOSURE de JOIN #Codesets codesets on ((de.drug_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C -- End Drug Exposure Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'appetite_suppressants_occurrence'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'appetite_suppressants_occurrence', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning bariatric_surgery.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (45889549,4326683,2108967,2109001,2109002,2109003,2109000,2108999,43531149,2108974,2108975,2108981) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (45889549,4326683,2108967,2109001,2109002,2109003,2109000,2108999,43531149,2108974,2108975,2108981) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Procedure Occurrence Criteria select C.person_id, C.procedure_occurrence_id as event_id, C.procedure_date as start_date, DATEADD(d,1,C.procedure_date) as END_DATE, C.procedure_concept_id as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.procedure_date as sort_date from ( select po.* FROM @cdm_database_schema.PROCEDURE_OCCURRENCE po JOIN #Codesets codesets on ((po.procedure_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C -- End Procedure Occurrence Criteria UNION ALL -- Begin Condition Occurrence Criteria SELECT C.person_id, C.condition_occurrence_id as event_id, C.condition_start_date as start_date, COALESCE(C.condition_end_date, DATEADD(day,1,C.condition_start_date)) as end_date, C.CONDITION_CONCEPT_ID as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.condition_start_date as sort_date FROM ( SELECT co.* FROM @cdm_database_schema.CONDITION_OCCURRENCE co JOIN #Codesets codesets on ((co.condition_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C -- End Condition Occurrence Criteria UNION ALL -- Begin Observation Criteria select C.person_id, C.observation_id as event_id, C.observation_date as start_date, DATEADD(d,1,C.observation_date) as END_DATE, C.observation_concept_id as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.observation_date as sort_date from ( select o.* FROM @cdm_database_schema.OBSERVATION o JOIN #Codesets codesets on ((o.observation_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C -- End Observation Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'bariatric_surgery_bariatric'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'bariatric_surgery_bariatric', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning beta_blockers_era.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (1314002,1307046,1322081,902427,1338005,1345858,1370109,1353766,1313200,1319998,1314577,19063575) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (1314002,1307046,1322081,902427,1338005,1345858,1370109,1353766,1313200,1319998,1314577,19063575) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Era Criteria select C.person_id, C.drug_era_id as event_id, C.drug_era_start_date as start_date, C.drug_era_end_date as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, CAST(NULL as bigint) as visit_occurrence_id, C.drug_era_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_ERA de where de.drug_concept_id in (SELECT concept_id from #Codesets where codeset_id = 0) ) C WHERE DATEDIFF(d,C.drug_era_start_date, C.drug_era_end_date) > 180 -- End Drug Era Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE WHERE QE.ordinal = 1 ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'beta_blockers_era'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'beta_blockers_era', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning beta_blockers_occurrence.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (1314002,1307046,1322081,902427,1338005,1345858,1370109,1353766,1313200,1319998,1314577,19063575) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (1314002,1307046,1322081,902427,1338005,1345858,1370109,1353766,1313200,1319998,1314577,19063575) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Exposure Criteria select C.person_id, C.drug_exposure_id as event_id, C.drug_exposure_start_date as start_date, COALESCE(C.drug_exposure_end_date, DATEADD(day, 1, C.drug_exposure_start_date)) as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.drug_exposure_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_EXPOSURE de JOIN #Codesets codesets on ((de.drug_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C -- End Drug Exposure Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'beta_blockers_occurrence'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'beta_blockers_occurrence', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning bmi_icd_bmi.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (4021606,45767018,40481140) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (4021606,45767018,40481140) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Condition Occurrence Criteria SELECT C.person_id, C.condition_occurrence_id as event_id, C.condition_start_date as start_date, COALESCE(C.condition_end_date, DATEADD(day,1,C.condition_start_date)) as end_date, C.CONDITION_CONCEPT_ID as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.condition_start_date as sort_date FROM ( SELECT co.* FROM @cdm_database_schema.CONDITION_OCCURRENCE co JOIN #Codesets codesets on ((co.condition_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C -- End Condition Occurrence Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_icd; INSERT INTO @target_database_schema.bmi_icd (person_id, condition_source_concept_id, age_days) select distinct CO.person_id, condition_source_concept_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort fc join omop_cdk_v1.dbo.person p on p.person_id = fc.person_id join omop_cdk_v1.dbo.CONDITION_OCCURRENCE co on co.person_id = fc.person_id join synpuf.dbo.CONCEPT c on c.concept_id = co.condition_source_concept_id and concept_name like 'Body Mass Index%' ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning cancer_mult.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (443392) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (443392) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Condition Occurrence Criteria SELECT C.person_id, C.condition_occurrence_id as event_id, C.condition_start_date as start_date, COALESCE(C.condition_end_date, DATEADD(day,1,C.condition_start_date)) as end_date, C.CONDITION_CONCEPT_ID as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.condition_start_date as sort_date FROM ( SELECT co.* FROM @cdm_database_schema.CONDITION_OCCURRENCE co JOIN #Codesets codesets on ((co.condition_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C -- End Condition Occurrence Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE WHERE QE.ordinal = 1 ; --- Inclusion Rule Inserts select 0 as inclusion_rule_id, person_id, event_id INTO #Inclusion_0 FROM ( select pe.person_id, pe.event_id FROM #qualified_events pe JOIN ( -- Begin Criteria Group select 0 as index_id, person_id, event_id FROM ( select E.person_id, E.event_id FROM #qualified_events E INNER JOIN ( -- Begin Correlated Criteria SELECT 0 as index_id, p.person_id, p.event_id FROM #qualified_events P INNER JOIN ( -- Begin Condition Occurrence Criteria SELECT C.person_id, C.condition_occurrence_id as event_id, C.condition_start_date as start_date, COALESCE(C.condition_end_date, DATEADD(day,1,C.condition_start_date)) as end_date, C.CONDITION_CONCEPT_ID as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.condition_start_date as sort_date FROM ( SELECT co.* FROM @cdm_database_schema.CONDITION_OCCURRENCE co JOIN #Codesets codesets on ((co.condition_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C -- End Condition Occurrence Criteria ) A on A.person_id = P.person_id GROUP BY p.person_id, p.event_id HAVING COUNT(A.TARGET_CONCEPT_ID) >= 4 -- End Correlated Criteria ) CQ on E.person_id = CQ.person_id and E.event_id = CQ.event_id GROUP BY E.person_id, E.event_id HAVING COUNT(index_id) = 1 ) G -- End Criteria Group ) AC on AC.person_id = pe.person_id AND AC.event_id = pe.event_id ) Results ; SELECT inclusion_rule_id, person_id, event_id INTO #inclusion_events FROM (select inclusion_rule_id, person_id, event_id from #Inclusion_0) I; TRUNCATE TABLE #Inclusion_0; DROP TABLE #Inclusion_0; with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups -- the matching group with all bits set ( POWER(2,# of inclusion rules) - 1 = inclusion_rule_mask WHERE (MG.inclusion_rule_mask = POWER(cast(2 as bigint),1)-1) ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'cancer_mult'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'cancer_mult', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning growth_hormone_era.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (1584910,1578181) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (1584910,1578181) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Era Criteria select C.person_id, C.drug_era_id as event_id, C.drug_era_start_date as start_date, C.drug_era_end_date as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, CAST(NULL as bigint) as visit_occurrence_id, C.drug_era_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_ERA de where de.drug_concept_id in (SELECT concept_id from #Codesets where codeset_id = 0) ) C WHERE DATEDIFF(d,C.drug_era_start_date, C.drug_era_end_date) > 180 -- End Drug Era Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE WHERE QE.ordinal = 1 ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'growth_hormone_era'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'growth_hormone_era', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning growth_hormone_occurrence.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (1584910,1578181) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (1584910,1578181) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Exposure Criteria select C.person_id, C.drug_exposure_id as event_id, C.drug_exposure_start_date as start_date, COALESCE(C.drug_exposure_end_date, DATEADD(day, 1, C.drug_exposure_start_date)) as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.drug_exposure_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_EXPOSURE de JOIN #Codesets codesets on ((de.drug_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C -- End Drug Exposure Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'growth_hormone_occurrence'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'growth_hormone_occurrence', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning insulin_era.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (1516976,1544838,1550023,1567198,1596977,1502905,43525509,19114827,35602717) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (1516976,1544838,1550023,1567198,1596977,1502905,43525509,19114827,35602717) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Era Criteria select C.person_id, C.drug_era_id as event_id, C.drug_era_start_date as start_date, C.drug_era_end_date as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, CAST(NULL as bigint) as visit_occurrence_id, C.drug_era_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_ERA de where de.drug_concept_id in (SELECT concept_id from #Codesets where codeset_id = 0) ) C WHERE DATEDIFF(d,C.drug_era_start_date, C.drug_era_end_date) > 180 -- End Drug Era Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE WHERE QE.ordinal = 1 ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'insulin_era'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'insulin_era', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning insulin_occurrence.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (1516976,1544838,1550023,1567198,1596977,1502905,43525509,19114827,35602717) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (1516976,1544838,1550023,1567198,1596977,1502905,43525509,19114827,35602717) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Exposure Criteria select C.person_id, C.drug_exposure_id as event_id, C.drug_exposure_start_date as start_date, COALESCE(C.drug_exposure_end_date, DATEADD(day, 1, C.drug_exposure_start_date)) as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.drug_exposure_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_EXPOSURE de JOIN #Codesets codesets on ((de.drug_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C -- End Drug Exposure Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'insulin_occurrence'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'insulin_occurrence', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning oral_steroids_era.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (1551099,939259,1518254,920458,903963,975125,1550557,1506270,19049823) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (1551099,939259,1518254,920458,903963,975125,1550557,1506270,19049823) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Era Criteria select C.person_id, C.drug_era_id as event_id, C.drug_era_start_date as start_date, C.drug_era_end_date as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, CAST(NULL as bigint) as visit_occurrence_id, C.drug_era_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_ERA de where de.drug_concept_id in (SELECT concept_id from #Codesets where codeset_id = 0) ) C WHERE DATEDIFF(d,C.drug_era_start_date, C.drug_era_end_date) > 180 -- End Drug Era Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe JOIN ( -- Begin Criteria Group select 0 as index_id, person_id, event_id FROM ( select E.person_id, E.event_id FROM primary_events E INNER JOIN ( -- Begin Correlated Criteria SELECT 0 as index_id, p.person_id, p.event_id FROM primary_events P INNER JOIN ( -- Begin Drug Exposure Criteria select C.person_id, C.drug_exposure_id as event_id, C.drug_exposure_start_date as start_date, COALESCE(C.drug_exposure_end_date, DATEADD(day, 1, C.drug_exposure_start_date)) as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.drug_exposure_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_EXPOSURE de JOIN #Codesets codesets on ((de.drug_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C WHERE C.route_concept_id in (4132161) -- End Drug Exposure Criteria ) A on A.person_id = P.person_id AND A.START_DATE >= P.OP_START_DATE AND A.START_DATE <= P.OP_END_DATE AND A.START_DATE >= P.OP_START_DATE AND A.START_DATE <= P.OP_END_DATE AND A.visit_occurrence_id = P.visit_occurrence_id GROUP BY p.person_id, p.event_id HAVING COUNT(A.TARGET_CONCEPT_ID) >= 1 -- End Correlated Criteria ) CQ on E.person_id = CQ.person_id and E.event_id = CQ.event_id GROUP BY E.person_id, E.event_id HAVING COUNT(index_id) = 1 ) G -- End Criteria Group ) AC on AC.person_id = pe.person_id and AC.event_id = pe.event_id ) QE WHERE QE.ordinal = 1 ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'oral_steroids_era'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'oral_steroids_era', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning oral_steroids_occurrence.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (1551099,939259,1518254,920458,903963,975125,1550557,1506270,19049823) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (1551099,939259,1518254,920458,903963,975125,1550557,1506270,19049823) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Exposure Criteria select C.person_id, C.drug_exposure_id as event_id, C.drug_exposure_start_date as start_date, COALESCE(C.drug_exposure_end_date, DATEADD(day, 1, C.drug_exposure_start_date)) as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.drug_exposure_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_EXPOSURE de JOIN #Codesets codesets on ((de.drug_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C WHERE C.route_concept_id in (4132161) ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE WHERE QE.ordinal = 1 ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- custom era strategy with ctePersons(person_id) as ( select distinct person_id from #included_events ) select person_id, drug_exposure_start_date, drug_exposure_end_date INTO #drugTarget FROM ( select de.PERSON_ID, DRUG_EXPOSURE_START_DATE, COALESCE(DRUG_EXPOSURE_END_DATE, DATEADD(day,DAYS_SUPPLY,DRUG_EXPOSURE_START_DATE), DATEADD(day,1,DRUG_EXPOSURE_START_DATE)) as DRUG_EXPOSURE_END_DATE FROM @cdm_database_schema.DRUG_EXPOSURE de JOIN ctePersons p on de.person_id = p.person_id JOIN #Codesets cs on cs.codeset_id = 0 AND de.drug_concept_id = cs.concept_id UNION ALL select de.PERSON_ID, DRUG_EXPOSURE_START_DATE, COALESCE(DRUG_EXPOSURE_END_DATE, DATEADD(day,DAYS_SUPPLY,DRUG_EXPOSURE_START_DATE), DATEADD(day,1,DRUG_EXPOSURE_START_DATE)) as DRUG_EXPOSURE_END_DATE FROM @cdm_database_schema.DRUG_EXPOSURE de JOIN ctePersons p on de.person_id = p.person_id JOIN #Codesets cs on cs.codeset_id = 0 AND de.drug_source_concept_id = cs.concept_id ) E ; select et.event_id, et.person_id, ERAS.era_end_date as end_date INTO #strategy_ends from #included_events et JOIN ( select ENDS.person_id, min(drug_exposure_start_date) as era_start_date, DATEADD(day,0, ENDS.era_end_date) as era_end_date from ( select de.person_id, de.drug_exposure_start_date, MIN(e.END_DATE) as era_end_date FROM #drugTarget DE JOIN ( --cteEndDates select PERSON_ID, DATEADD(day,-1 * 0,EVENT_DATE) as END_DATE -- unpad the end date by 0 FROM ( select PERSON_ID, EVENT_DATE, EVENT_TYPE, MAX(START_ORDINAL) OVER (PARTITION BY PERSON_ID ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal, ROW_NUMBER() OVER (PARTITION BY PERSON_ID ORDER BY EVENT_DATE, EVENT_TYPE) AS OVERALL_ORD -- this re-numbers the inner UNION so all rows are numbered ordered by the event date from ( -- select the start dates, assigning a row number to each Select PERSON_ID, DRUG_EXPOSURE_START_DATE AS EVENT_DATE, 0 as EVENT_TYPE, ROW_NUMBER() OVER (PARTITION BY PERSON_ID ORDER BY DRUG_EXPOSURE_START_DATE) as START_ORDINAL from #drugTarget D UNION ALL -- add the end dates with NULL as the row number, padding the end dates by 0 to allow a grace period for overlapping ranges. select PERSON_ID, DATEADD(day,0,DRUG_EXPOSURE_END_DATE), 1 as EVENT_TYPE, NULL FROM #drugTarget D ) RAWDATA ) E WHERE 2 * E.START_ORDINAL - E.OVERALL_ORD = 0 ) E on DE.PERSON_ID = E.PERSON_ID and E.END_DATE >= DE.DRUG_EXPOSURE_START_DATE GROUP BY de.person_id, de.drug_exposure_start_date ) ENDS GROUP BY ENDS.person_id, ENDS.era_end_date ) ERAS on ERAS.person_id = et.person_id WHERE et.start_date between ERAS.era_start_date and ERAS.era_end_date; TRUNCATE TABLE #drugTarget; DROP TABLE #drugTarget; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events UNION ALL -- End Date Strategy SELECT event_id, person_id, end_date from #strategy_ends ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'oral_steroids_occurrence'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'oral_steroids_occurrence', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #strategy_ends; DROP TABLE #strategy_ends; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning oral_steroids_ten_day.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (1551099,939259,1518254,920458,903963,975125,1550557,1506270,19049823) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (1551099,939259,1518254,920458,903963,975125,1550557,1506270,19049823) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Exposure Criteria select C.person_id, C.drug_exposure_id as event_id, C.drug_exposure_start_date as start_date, COALESCE(C.drug_exposure_end_date, DATEADD(day, 1, C.drug_exposure_start_date)) as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.drug_exposure_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_EXPOSURE de JOIN #Codesets codesets on ((de.drug_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C WHERE C.route_concept_id in (4132161) and sig like '%10 days%' -- End Drug Exposure Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,10,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE WHERE QE.ordinal = 1 ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- custom era strategy with ctePersons(person_id) as ( select distinct person_id from #included_events ) select person_id, drug_exposure_start_date, drug_exposure_end_date INTO #drugTarget FROM ( select de.PERSON_ID, DRUG_EXPOSURE_START_DATE, COALESCE(DRUG_EXPOSURE_END_DATE, DATEADD(day,DAYS_SUPPLY,DRUG_EXPOSURE_START_DATE), DATEADD(day,1,DRUG_EXPOSURE_START_DATE)) as DRUG_EXPOSURE_END_DATE FROM @cdm_database_schema.DRUG_EXPOSURE de JOIN ctePersons p on de.person_id = p.person_id JOIN #Codesets cs on cs.codeset_id = 0 AND de.drug_concept_id = cs.concept_id UNION ALL select de.PERSON_ID, DRUG_EXPOSURE_START_DATE, COALESCE(DRUG_EXPOSURE_END_DATE, DATEADD(day,DAYS_SUPPLY,DRUG_EXPOSURE_START_DATE), DATEADD(day,1,DRUG_EXPOSURE_START_DATE)) as DRUG_EXPOSURE_END_DATE FROM @cdm_database_schema.DRUG_EXPOSURE de JOIN ctePersons p on de.person_id = p.person_id JOIN #Codesets cs on cs.codeset_id = 0 AND de.drug_source_concept_id = cs.concept_id ) E ; select et.event_id, et.person_id, ERAS.era_end_date as end_date INTO #strategy_ends from #included_events et JOIN ( select ENDS.person_id, min(drug_exposure_start_date) as era_start_date, DATEADD(day,0, ENDS.era_end_date) as era_end_date from ( select de.person_id, de.drug_exposure_start_date, MIN(e.END_DATE) as era_end_date FROM #drugTarget DE JOIN ( --cteEndDates select PERSON_ID, DATEADD(day,-1 * 0,EVENT_DATE) as END_DATE -- unpad the end date by 0 FROM ( select PERSON_ID, EVENT_DATE, EVENT_TYPE, MAX(START_ORDINAL) OVER (PARTITION BY PERSON_ID ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal, ROW_NUMBER() OVER (PARTITION BY PERSON_ID ORDER BY EVENT_DATE, EVENT_TYPE) AS OVERALL_ORD -- this re-numbers the inner UNION so all rows are numbered ordered by the event date from ( -- select the start dates, assigning a row number to each Select PERSON_ID, DRUG_EXPOSURE_START_DATE AS EVENT_DATE, 0 as EVENT_TYPE, ROW_NUMBER() OVER (PARTITION BY PERSON_ID ORDER BY DRUG_EXPOSURE_START_DATE) as START_ORDINAL from #drugTarget D UNION ALL -- add the end dates with NULL as the row number, padding the end dates by 0 to allow a grace period for overlapping ranges. select PERSON_ID, DATEADD(day,0,DRUG_EXPOSURE_END_DATE), 1 as EVENT_TYPE, NULL FROM #drugTarget D ) RAWDATA ) E WHERE 2 * E.START_ORDINAL - E.OVERALL_ORD = 0 ) E on DE.PERSON_ID = E.PERSON_ID and E.END_DATE >= DE.DRUG_EXPOSURE_START_DATE GROUP BY de.person_id, de.drug_exposure_start_date ) ENDS GROUP BY ENDS.person_id, ENDS.era_end_date ) ERAS on ERAS.person_id = et.person_id WHERE et.start_date between ERAS.era_start_date and ERAS.era_end_date; TRUNCATE TABLE #drugTarget; DROP TABLE #drugTarget; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events UNION ALL -- End Date Strategy SELECT event_id, person_id, end_date from #strategy_ends ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'oral_steroids_ten_day'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'oral_steroids_ten_day', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #strategy_ends; DROP TABLE #strategy_ends; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning pregnancy.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 1 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (444094) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (444094) and c.invalid_reason is null ) I LEFT JOIN ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (432441,4094448) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (432441,4094448) and c.invalid_reason is null ) E ON I.concept_id = E.concept_id WHERE E.concept_id is null ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Condition Occurrence Criteria SELECT C.person_id, C.condition_occurrence_id as event_id, C.condition_start_date as start_date, COALESCE(C.condition_end_date, DATEADD(day,1,C.condition_start_date)) as end_date, C.CONDITION_CONCEPT_ID as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.condition_start_date as sort_date FROM ( SELECT co.* FROM @cdm_database_schema.CONDITION_OCCURRENCE co JOIN #Codesets codesets on ((co.condition_concept_id = codesets.concept_id and codesets.codeset_id = 1)) ) C -- End Condition Occurrence Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe JOIN ( -- Begin Criteria Group select 0 as index_id, person_id, event_id FROM ( select E.person_id, E.event_id FROM primary_events E INNER JOIN ( -- Begin Demographic Criteria SELECT 0 as index_id, e.person_id, e.event_id FROM primary_events E JOIN @cdm_database_schema.PERSON P ON P.PERSON_ID = E.PERSON_ID WHERE P.gender_concept_id in (8532) GROUP BY e.person_id, e.event_id -- End Demographic Criteria UNION ALL -- Begin Demographic Criteria SELECT 1 as index_id, e.person_id, e.event_id FROM primary_events E JOIN @cdm_database_schema.PERSON P ON P.PERSON_ID = E.PERSON_ID WHERE YEAR(E.start_date) - P.year_of_birth > 12 GROUP BY e.person_id, e.event_id -- End Demographic Criteria UNION ALL -- Begin Demographic Criteria SELECT 2 as index_id, e.person_id, e.event_id FROM primary_events E JOIN @cdm_database_schema.PERSON P ON P.PERSON_ID = E.PERSON_ID WHERE YEAR(E.start_date) - P.year_of_birth < 55 GROUP BY e.person_id, e.event_id -- End Demographic Criteria ) CQ on E.person_id = CQ.person_id and E.event_id = CQ.event_id GROUP BY E.person_id, E.event_id HAVING COUNT(index_id) = 3 ) G -- End Criteria Group ) AC on AC.person_id = pe.person_id and AC.event_id = pe.event_id ) QE ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results ; -- date offset strategy select event_id, person_id, case when DATEADD(day,365,start_date) > start_date then DATEADD(day,365,start_date) else start_date end as end_date INTO #strategy_ends from #included_events; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- End Date Strategy SELECT event_id, person_id, end_date from #strategy_ends ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 365, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,365,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'pregnancy'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'pregnancy', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #strategy_ends; DROP TABLE #strategy_ends; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning ssri_era.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (722031,715939,797617,755695,751412,739138) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (722031,715939,797617,755695,751412,739138) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Era Criteria select C.person_id, C.drug_era_id as event_id, C.drug_era_start_date as start_date, C.drug_era_end_date as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, CAST(NULL as bigint) as visit_occurrence_id, C.drug_era_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_ERA de where de.drug_concept_id in (SELECT concept_id from #Codesets where codeset_id = 0) ) C WHERE DATEDIFF(d,C.drug_era_start_date, C.drug_era_end_date) > 180 -- End Drug Era Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE WHERE QE.ordinal = 1 ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'ssri_era'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'ssri_era', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning ssri_occurrence.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (722031,715939,797617,755695,751412,739138) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (722031,715939,797617,755695,751412,739138) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Exposure Criteria select C.person_id, C.drug_exposure_id as event_id, C.drug_exposure_start_date as start_date, COALESCE(C.drug_exposure_end_date, DATEADD(day, 1, C.drug_exposure_start_date)) as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.drug_exposure_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_EXPOSURE de JOIN #Codesets codesets on ((de.drug_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C -- End Drug Exposure Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'ssri_occurrence'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'ssri_occurrence', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning stimulants_era.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (40170911,1714319,741530,739363,704053,742267,705944,719311,709567,19090984,735340,1344965,742185,42873635,1398937,710650,731533,714785) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (40170911,1714319,741530,739363,704053,742267,705944,719311,709567,19090984,735340,1344965,742185,42873635,1398937,710650,731533,714785) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Era Criteria select C.person_id, C.drug_era_id as event_id, C.drug_era_start_date as start_date, C.drug_era_end_date as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, CAST(NULL as bigint) as visit_occurrence_id, C.drug_era_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_ERA de where de.drug_concept_id in (SELECT concept_id from #Codesets where codeset_id = 0) ) C WHERE DATEDIFF(d,C.drug_era_start_date, C.drug_era_end_date) > 180 -- End Drug Era Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE WHERE QE.ordinal = 1 ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'stimulants_era'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'stimulants_era', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning stimulants_occurrence.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (40170911,1714319,741530,739363,704053,742267,705944,719311,709567,19090984,735340,1344965,742185,42873635,1398937,710650,731533,714785) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (40170911,1714319,741530,739363,704053,742267,705944,719311,709567,19090984,735340,1344965,742185,42873635,1398937,710650,731533,714785) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Exposure Criteria select C.person_id, C.drug_exposure_id as event_id, C.drug_exposure_start_date as start_date, COALESCE(C.drug_exposure_end_date, DATEADD(day, 1, C.drug_exposure_start_date)) as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.drug_exposure_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_EXPOSURE de JOIN #Codesets codesets on ((de.drug_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C -- End Drug Exposure Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'stimulants_occurrence'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'stimulants_occurrence', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning thyroid_era.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (1501700,19069223,1505346,1501309) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (1501700,19069223,1505346,1501309) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Era Criteria select C.person_id, C.drug_era_id as event_id, C.drug_era_start_date as start_date, C.drug_era_end_date as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, CAST(NULL as bigint) as visit_occurrence_id, C.drug_era_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_ERA de where de.drug_concept_id in (SELECT concept_id from #Codesets where codeset_id = 0) ) C WHERE DATEDIFF(d,C.drug_era_start_date, C.drug_era_end_date) > 180 -- End Drug Era Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE WHERE QE.ordinal = 1 ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'thyroid_era'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'thyroid_era', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets; /* beginning thyroid_occurrence.sql*/ GO /* Need to replace @vocabulary_database_schema @cdm_database_schema @target_database_schema OHDSI.dbo */ CREATE TABLE #Codesets ( codeset_id int NOT NULL, concept_id bigint NOT NULL ) ; INSERT INTO #Codesets (codeset_id, concept_id) SELECT 0 as codeset_id, c.concept_id FROM (select distinct I.concept_id FROM ( select concept_id from @vocabulary_database_schema.CONCEPT where concept_id in (1501700,19069223,1505346,1501309) UNION select c.concept_id from @vocabulary_database_schema.CONCEPT c join @vocabulary_database_schema.CONCEPT_ANCESTOR ca on c.concept_id = ca.descendant_concept_id and ca.ancestor_concept_id in (1501700,19069223,1505346,1501309) and c.invalid_reason is null ) I ) C; with primary_events (event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id) as ( -- Begin Primary Events select P.ordinal as event_id, P.person_id, P.start_date, P.end_date, op_start_date, op_end_date, cast(P.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( select E.person_id, E.start_date, E.end_date, row_number() OVER (PARTITION BY E.person_id ORDER BY E.sort_date ASC) ordinal, OP.observation_period_start_date as op_start_date, OP.observation_period_end_date as op_end_date, cast(E.visit_occurrence_id as bigint) as visit_occurrence_id FROM ( -- Begin Drug Exposure Criteria select C.person_id, C.drug_exposure_id as event_id, C.drug_exposure_start_date as start_date, COALESCE(C.drug_exposure_end_date, DATEADD(day, 1, C.drug_exposure_start_date)) as end_date, C.drug_concept_id as TARGET_CONCEPT_ID, C.visit_occurrence_id, C.drug_exposure_start_date as sort_date from ( select de.* FROM @cdm_database_schema.DRUG_EXPOSURE de JOIN #Codesets codesets on ((de.drug_concept_id = codesets.concept_id and codesets.codeset_id = 0)) ) C -- End Drug Exposure Criteria ) E JOIN @cdm_database_schema.observation_period OP on E.person_id = OP.person_id and E.start_date >= OP.observation_period_start_date and E.start_date <= op.observation_period_end_date WHERE DATEADD(day,0,OP.OBSERVATION_PERIOD_START_DATE) <= E.START_DATE AND DATEADD(day,0,E.START_DATE) <= OP.OBSERVATION_PERIOD_END_DATE ) P WHERE P.ordinal = 1 -- End Primary Events ) SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, visit_occurrence_id INTO #qualified_events FROM ( select pe.event_id, pe.person_id, pe.start_date, pe.end_date, pe.op_start_date, pe.op_end_date, row_number() over (partition by pe.person_id order by pe.start_date ASC) as ordinal, cast(pe.visit_occurrence_id as bigint) as visit_occurrence_id FROM primary_events pe ) QE ; --- Inclusion Rule Inserts create table #inclusion_events (inclusion_rule_id bigint, person_id bigint, event_id bigint ); with cteIncludedEvents(event_id, person_id, start_date, end_date, op_start_date, op_end_date, ordinal) as ( SELECT event_id, person_id, start_date, end_date, op_start_date, op_end_date, row_number() over (partition by person_id order by start_date ASC) as ordinal from ( select Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date, SUM(coalesce(POWER(cast(2 as bigint), I.inclusion_rule_id), 0)) as inclusion_rule_mask from #qualified_events Q LEFT JOIN #inclusion_events I on I.person_id = Q.person_id and I.event_id = Q.event_id GROUP BY Q.event_id, Q.person_id, Q.start_date, Q.end_date, Q.op_start_date, Q.op_end_date ) MG -- matching groups ) select event_id, person_id, start_date, end_date, op_start_date, op_end_date into #included_events FROM cteIncludedEvents Results WHERE Results.ordinal = 1 ; -- generate cohort periods into #final_cohort with cohort_ends (event_id, person_id, end_date) as ( -- cohort exit dates -- By default, cohort exit at the event's op end date select event_id, person_id, op_end_date as end_date from #included_events ), first_ends (person_id, start_date, end_date) as ( select F.person_id, F.start_date, F.end_date FROM ( select I.event_id, I.person_id, I.start_date, E.end_date, row_number() over (partition by I.person_id, I.event_id order by E.end_date) as ordinal from #included_events I join cohort_ends E on I.event_id = E.event_id and I.person_id = E.person_id and E.end_date >= I.start_date ) F WHERE F.ordinal = 1 ) select person_id, start_date, end_date INTO #cohort_rows from first_ends; with cteEndDates (person_id, end_date) AS -- the magic ( SELECT person_id , DATEADD(day,-1 * 0, event_date) as end_date FROM ( SELECT person_id , event_date , event_type , MAX(start_ordinal) OVER (PARTITION BY person_id ORDER BY event_date, event_type ROWS UNBOUNDED PRECEDING) AS start_ordinal , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY event_date, event_type) AS overall_ord FROM ( SELECT person_id , start_date AS event_date , -1 AS event_type , ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY start_date) AS start_ordinal FROM #cohort_rows UNION ALL SELECT person_id , DATEADD(day,0,end_date) as end_date , 1 AS event_type , NULL FROM #cohort_rows ) RAWDATA ) e WHERE (2 * e.start_ordinal) - e.overall_ord = 0 ), cteEnds (person_id, start_date, end_date) AS ( SELECT c.person_id , c.start_date , MIN(e.end_date) AS end_date FROM #cohort_rows c JOIN cteEndDates e ON c.person_id = e.person_id AND e.end_date >= c.start_date GROUP BY c.person_id, c.start_date ) select person_id, min(start_date) as start_date, end_date into #final_cohort from cteEnds group by person_id, end_date ; DELETE FROM @target_database_schema.bmi_covariates where entry_name = 'thyroid_occurrence'; INSERT INTO @target_database_schema.bmi_covariates (entry_name, person_id, age_days) select 'thyroid_occurrence', CO.person_id, DATEDIFF(DAY, CONVERT(DATE,CAST([year_of_birth] AS VARCHAR(4))+'-'+ CAST(isnull([month_of_birth],7) AS VARCHAR(2))+'-'+ CAST(isnull([day_of_birth],1) AS VARCHAR(2))) , start_date) AS age_days FROM #final_cohort CO join omop_cdk_v1.dbo.person p on p.person_id = co.person_id ; TRUNCATE TABLE #cohort_rows; DROP TABLE #cohort_rows; TRUNCATE TABLE #final_cohort; DROP TABLE #final_cohort; TRUNCATE TABLE #inclusion_events; DROP TABLE #inclusion_events; TRUNCATE TABLE #qualified_events; DROP TABLE #qualified_events; TRUNCATE TABLE #included_events; DROP TABLE #included_events; TRUNCATE TABLE #Codesets; DROP TABLE #Codesets;