-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTT 1.1 target_trial_hosp_AMR_7day_caltime.sql
1555 lines (1380 loc) · 44.3 KB
/
TT 1.1 target_trial_hosp_AMR_7day_caltime.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
---------------------------------------------------------------------------
---------------------------------------------------------------------------
--***************MUST RUN SCRIPTS 1.1 Cohort1_2015_to_2020 ****************
--**********AND 3.2_Cohort3_2015_to_2020.sql PRIOR TO THIS SCRIPT**********
--initial tables:
-- sailw1169v.V15VB_COHORT1
-- SAILW1169V.V15VB_COHORT3_ALL_RPT_ABX
---------------------------------------------------------------------------
---------------------------------------------------------------------------
--cohort comprised of women with rUTIs between 2015 and 2020.
--general inclusion criteria matches impart cohort 1 with additional exclusion
--criteria cannot have used prophylactic antibiotics (pAbx) within the 12 months
--prior to rUTI and must be Welsh resident at baseline (rUTI diagnosis date).
--To exclude hospital acquired infections, the episode must start within 2 days
--of an admission and must not occur within 3 days of a prior discharge
/*cohort 1 inclusion criteria
*
* All female patients in WDSD, WLGP and PEDW
* Excluding:
* Records where ALF status code is not 1, 4 or 39
* Individuals who died prior to 2010-01-01
* Individuals not registered with a SAIL registered GP practice during period 2010-01-01 to 2020-12-31
* Individuals without UTIs
* Individuals without recurrent UTIs
* Individuals without at least 12 months of data prior to recurrent UTI
* Indivduals with a pregnancy within 40 weeks of baseline
* Individuals with a catheter code at any date prior to baseline
*
* Where WOB did not match in WDSD and WLGP the date was taken from WDSD
*/
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
--Identify patients with pAbx between 2015 and 2020
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
--Exclude those with pabx in 12 months prior to rUTI
--Add if left cohort during study period and whether lost to follow up or died
--Where GP registration ended the day before date of death then classified as died
CALL fnc.drop_if_exists('sailw1169v.VB_7day_TARGET_TRIAL_PRE');
CREATE TABLE sailw1169v.VB_7day_TARGET_TRIAL_PRE
AS(
SELECT alf_pe,
diag_date,
wob,
AGEDIAG,
GP_END_DATE,
WIMD_2019_QUINTILE,
ETHNIC,
BMI_VAL,
SMOk,
SMOKING_STATUS_DESCRIPTION,
ALCOHOL_FLG,
ALCOHOL,
EFI,
DIABETES,
CANCER,
RENAL_DISEASE,
HYPERTENSION,
CVD,
CEREBROV,
HEARTFAIL,
MS,
MND,
DEMENTIA,
PARKINSONS,
SMH,
ASTHMA,
COPD,
IMMUN_SUPP,
RENAL_STONE,
ABN_RENAL,
PABX_AFTER_RUTI AS PABX_STR
FROM sailw1169v.V15VB_COHORT1)
WITH NO DATA;
ALTER TABLE sailw1169v.VB_7day_TARGET_TRIAL_PRE
ADD COLUMN days_to_pabx integer
ADD COLUMN dod date
ADD COLUMN cohort_end_dt date
ADD COLUMN cohort_end_reason varchar(10)
ADD COLUMN gp_int_days integer;
INSERT INTO sailw1169v.VB_7day_TARGET_TRIAL_PRE
WITH cte AS -- add dod and study end date and reason to cohort 1
(SELECT coh.*,
date(ad.DEATH_DT) AS dod,
CASE WHEN ((coh.diag_date + 12 MONTHS < coh.wob + 120 YEARS)
AND (coh.diag_date + 12 MONTHS < coh.gp_end_date)
AND (coh.wob+120 < ad.death_dt
OR ad.death_dt IS null))
THEN coh.diag_date + 12 MONTHS
WHEN ((coh.gp_end_date < ad.death_dt - 1 day
OR YEAR(coh.gp_end_date) BETWEEN '2015' and '2020' AND ad.death_dt IS NULL)
AND coh.gp_end_date < coh.WOB + 120 years)
THEN date(gp_end_date)
WHEN (ad.death_dt <= coh.gp_end_date + 1 day
AND ad.death_dt <= coh.WOB + 120 years)
THEN date(ad.death_dt)
WHEN (coh.wob + 120 years < coh.gp_end_date
AND (coh.wob+120 < ad.death_dt
OR ad.death_dt IS null))
THEN date(coh.wob + 120 YEARS)
ELSE '2020-12-31'
END AS cohort_end_dt,
CASE WHEN ((coh.diag_date + 12 MONTHS < coh.wob + 120 YEARS)
AND (coh.diag_date + 12 MONTHS < coh.gp_end_date)
AND (coh.wob+120 < ad.death_dt
OR ad.death_dt IS null)
AND coh.diag_date + 12 MONTHS <= '2020-12-31')
THEN 'DG +12mths'
WHEN ((coh.gp_end_date < ad.death_dt - 1 day
OR YEAR(coh.gp_end_date) BETWEEN '2015' and '2020' AND ad.death_dt IS NULL)
AND coh.gp_end_date < coh.WOB + 120 YEARS
AND coh.GP_END_DATE <= '2020-12-31')
THEN 'LTF'
WHEN (ad.death_dt <= coh.gp_end_date + 1 day
AND ad.death_dt <= coh.WOB + 120 YEARS
AND ad.death_dt <= '2020-12-31')
THEN 'DIED'
WHEN (coh.wob + 120 years < coh.gp_end_date
AND (coh.wob+120 < ad.death_dt
OR ad.death_dt IS null)
AND coh.wob + 120 years <= '2020-12-31')
THEN 'LTF'
ELSE 'STUDY END'
END AS cohort_end_reason
FROM sailw1169v.V15VB_COHORT1 AS coh
LEFT JOIN sail1169v.ADDE_DEATHS_20210628 AS ad
ON coh.ALF_PE = ad.ALF_PE
WHERE coh.WIMD_2019_QUINTILE IS NOT NULL
AND coh.pabx = 0),
CTE2 AS --identify those with pabx in the 12 months prior to rUTI
(SELECT DISTINCT(coh.ALF_PE)
FROM SAILW1169V.V15VB_ALTERNATING_PABX_COH3_PRE AS abx
INNER JOIN sailw1169v.V15VB_COHORT1 AS coh
ON ABX.ALF_PE = COH.alf_pe
WHERE (coh.DIAG_DATE > abx.ALT_END_DT_COMB
AND MONTHS_BETWEEN(coh.diag_date,abx.ALT_END_DT_COMB) < 12)
OR coh.diag_date BETWEEN coh.PABX_AFTER_RUTI AND abx.ALT_END_DT_COMB),
cte3 AS --calculate gp interaction days in the 12 months after baseline
(SELECT a.ALF_PE,
a.DIAG_DATE AS diag_dt_int,
count(DISTINCT EVENT_DT) AS gp_int_count
FROM
sail1169v.WLGP_GP_EVENT_CLEANSED_20220301 AS b
INNER JOIN sailw1169v.V15VB_COHORT1 AS a
ON a.alf_pe = b.alf_pe
WHERE
b.EVENT_DT BETWEEN a.DIAG_DATE + 1 day AND a.DIAG_DATE + 1 year
AND ((substr(EVENT_CD,
1,
1) <> lower(substr(EVENT_CD, 1, 1)) )
OR LEFT(event_cd,1) IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'))
GROUP BY a.ALF_PE, a.DIAG_DATE)
SELECT cte.alf_pe,
cte.diag_date,
wob,
AGEDIAG,
GP_END_DATE,
WIMD_2019_QUINTILE,
CASE WHEN ETHNIC IS NOT NULL
THEN ethnic
ELSE eth.ETHN_EC_ONS_DATE_LATEST_CODE
END
AS ethnic,
BMI_VAL,
SMOk,
SMOKING_STATUS_DESCRIPTION,
ALCOHOL_FLG,
ALCOHOL,
EFI,
DIABETES,
CANCER,
RENAL_DISEASE,
HYPERTENSION,
CVD,
CEREBROV,
HEARTFAIL,
MS,
MND,
DEMENTIA,
PARKINSONS,
SMH,
ASTHMA,
COPD,
IMMUN_SUPP,
RENAL_STONE,
ABN_RENAL,
PABX_AFTER_RUTI,
days_between(pabx_after_ruti, DIAG_DATE),
dod,
cohort_end_dt,
cohort_end_reason,
CASE WHEN cte3.gp_int_count IS NULL
THEN 0
ELSE cte3.gp_int_count
end
FROM CTE
LEFT JOIN sailw1169v.ETHN_1169 AS eth
ON cte.alf_pe = eth.alf_pe
LEFT JOIN cte3
ON cte.alf_pe = cte3.alf_pe
WHERE CTE.ALF_PE NOT IN --remove those with prior pabx in 12 months from cohort1
(SELECT CTE2.ALF_PE FROM CTE2);
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
--add pabx first prescription and pabx end dates
CALL fnc.drop_if_exists('sailw1169v.VB_7day_tt_pabx_in_12_mnth');
CREATE TABLE sailw1169v.VB_7day_tt_pabx_in_12_mnth
(alf_pe varchar(15),
PABX_str date,
pabx_first_script date,
pabx_end date);
INSERT INTO sailw1169v.VB_7day_tt_pabx_in_12_mnth
WITH cte as
(SELECT coh.alf_pe,
coh.pabx_str,
min(aa.alt_str_dt) AS alt_str_dt
FROM sailw1169v.VB_7day_TARGET_TRIAL_PRE AS coh
INNER JOIN SAILW1169V.VB_ALTERNATING_PABX_COH3 AS aa
ON coh.alf_pe = aa.alf_pe
AND coh.pabx_str = aa.pabx_str
GROUP BY coh.alf_pe, coh.pabx_str)
SELECT DISTINCT cte.alf_pe,
cte.pabx_str,
cte.alt_str_dt,
max(ed.ALT_END_DT_COMB) AS pabx_end
FROM cte
INNER JOIN SAILW1169V.VB_ALTERNATING_PABX_COH3_PRE AS ed
ON cte.alf_pe = ed.alf_pe
AND cte.pabx_str = ed.pabx_str
GROUP BY cte.alf_pe, cte.pabx_str, cte.alt_str_dt;
ALTER TABLE sailw1169v.VB_7day_TARGET_TRIAL_PRE
ADD COLUMN first_abx_dt date
ADD COLUMN pabx_end date;
MERGE into sailw1169v.VB_7day_TARGET_TRIAL_PRE AS coh
USING sailw1169v.VB_7day_tt_pabx_in_12_mnth AS pabx
ON coh.alf_pe = pabx.alf_pe
WHEN MATCHED THEN
UPDATE
SET (coh.first_abx_dt, coh.pabx_end) = (pabx.pabx_first_script, pabx.pabx_end)
;
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--add prescription dose
CALL fnc.drop_if_exists('SESSION.vb_tt_dose_consistency');
DECLARE GLOBAL TEMPORARY TABLE SESSION.vb_tt_dose_consistency
(alf_pe varchar(15),
pabx_str date,
dose varchar(10),
dose_consistency varchar(20))
ON COMMIT PRESERVE ROWS;
COMMIT;
--Insert where there is more than one dose due to multiple antibiotic types
INSERT INTO SESSION.vb_tt_dose_consistency
WITH cte as
(SELECT DISTINCT amr.alf_pe,
abx.ANTIBX_CATEGORY,
abx.DOSE,
abx.DOSE_CONSISTENCY
FROM sailw1169v.VB_7day_TARGET_TRIAL_PRE AS amr
left JOIN SAILW1169V.V15VB_COHORT3_ALL_RPT_ABX AS abx
ON amr.alf_pe = abx.alf_pe
AND amr.PABX_STR = abx.EVENT_DT
WHERE abx.EVENT_IN_GRP = 3),
cte2 AS (SELECT alf_pe, COUNT(alf_pe) AS alf_count
FROM cte
GROUP BY alf_pe
HAVING COUNT(alf_pe)>1)
SELECT DISTINCT coh.alf_pe,
coh.PABX_STR,
'Multi',
'Multi'
FROM sailw1169v.VB_7day_TARGET_TRIAL_AMR_WRRS AS coh
RIGHT JOIN cte
ON coh.alf_pe = cte.alf_pe
INNER JOIN cte2
ON coh.alf_pe = cte2.alf_pe
ORDER BY coh.alf_pe;
COMMIT;
--Insert where there is a single dose
INSERT INTO SESSION.vb_tt_dose_consistency
WITH cte as
(SELECT DISTINCT amr.alf_pe,
abx.ANTIBX_CATEGORY,
abx.DOSE,
abx.DOSE_CONSISTENCY
FROM sailw1169v.VB_7day_TARGET_TRIAL_PRE AS amr
left JOIN SAILW1169V.V15VB_COHORT3_ALL_RPT_ABX AS abx
ON amr.alf_pe = abx.alf_pe
AND amr.PABX_STR = abx.EVENT_DT
WHERE abx.EVENT_IN_GRP = 3),
cte2 AS (SELECT alf_pe, COUNT(alf_pe) AS alf_count
FROM cte
GROUP BY alf_pe
HAVING COUNT(alf_pe) = 1)
SELECT DISTINCT coh.alf_pe,
coh.PABX_STR,
cte.dose,
cte.dose_consistency
FROM sailw1169v.VB_7day_TARGET_TRIAL_AMR_WRRS AS coh
RIGHT JOIN cte
ON coh.alf_pe = cte.alf_pe
INNER JOIN cte2
ON coh.alf_pe = cte2.alf_pe
ORDER BY coh.alf_pe;
COMMIT;
ALTER table sailw1169v.VB_7day_TARGET_TRIAL_PRE
ADD COLUMN dose varchar(15)
ADD COLUMN dose_consistency varchar(20);
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_PRE AS amr
SET amr.dose = (SELECT abx.dose
FROM SESSION.vb_tt_dose_consistency AS abx
WHERE abx.alf_pe = amr.alf_pe);
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_PRE AS amr
SET amr.dose_consistency = (SELECT abx.dose_consistency
FROM SESSION.vb_tt_dose_consistency AS abx
WHERE abx.alf_pe = amr.alf_pe);
-------------------------------------------------------------------------------------------
--add next pabx start after first sequence has ended
ALTER TABLE sailw1169v.VB_7day_TARGET_TRIAL_PRE
ADD COLUMN NEXT_PABX_STR date;
merge INTO sailw1169v.VB_7day_TARGET_TRIAL_PRE AS ttp
USING
(SELECT tt.alf_pe,
tt.pabx_str,
tt.pabx_end,
min(abx.PABX_STR) AS next_pabx_str
FROM sailw1169v.VB_7day_TARGET_TRIAL_PRE AS tt
INNER JOIN SAILW1169V.V15VB_ALTERNATING_PABX_COH3 AS abx
ON tt.alf_pe = abx.alf_pe
WHERE abx.PABX_STR > tt.PABX_END
GROUP BY tt.alf_pe, tt.PABX_STR, tt.PABX_END
ORDER BY tt.alf_pe) AS pabx
ON ttp.alf_pe = pabx.ALF_PE
WHEN MATCHED THEN UPDATE
SET NEXT_PABX_STR = pabx.next_pabx_str;
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_PRE
SET cohort_end_reason = CASE WHEN (next_pabx_str < DOD
OR (next_pabx_str IS NOT NULL
AND dod IS NULL))
AND next_pabx_str < GP_END_DATE
AND next_pabx_str < '2020-12-31'
AND next_pabx_str < diag_date + 12 months
THEN 'NEW PABX'
ELSE COHORT_END_REASON
END;
---------------------------------------------------------------------
--add pabx start at any time after rUTI (not just 12 months)
CALL fnc.drop_if_exists('sailw1169v.tt_first_pabx_after_ruti');
CREATE TABLE sailw1169v.tt_first_pabx_after_ruti
(alf_pe varchar(15),
PABX_str_all date,
pabx_all_first_script date,
pabx_end_all date);
INSERT INTO sailw1169v.tt_first_pabx_after_ruti
WITH cte as
(SELECT cohp.alf_pe,
min(pabx.PABX_STR) AS PABX_str_all
FROM sailw1169v.VB_7day_TARGET_TRIAL_PRE AS cohp
left JOIN SAILW1169V.VB_ALTERNATING_PABX_COH3 AS pabx
ON pabx.ALF_PE = cohp.ALF_PE
AND DAYS_BETWEEN(pabx.PABX_STR,cohp.DIAG_Date) >= 0
GROUP BY cohp.alf_pe
ORDER BY cohp.alf_pe),
cte2 as
(SELECT cte.alf_pe,
cte.pabx_str_all,
min(aa.alt_str_dt) AS alt_str_dt
FROM cte
INNER JOIN SAILW1169V.VB_ALTERNATING_PABX_COH3 AS aa
ON cte.alf_pe = aa.alf_pe
AND cte.pabx_str_all = aa.pabx_str
GROUP BY cte.alf_pe, cte.pabx_str_all)
SELECT DISTINCT cte2.alf_pe,
cte2.pabx_str_all,
cte2.alt_str_dt,
max(ed.ALT_END_DT_COMB) AS pabx_end_all
FROM cte2
INNER JOIN SAILW1169V.VB_ALTERNATING_PABX_COH3_PRE AS ed
ON cte2.alf_pe = ed.alf_pe
AND cte2.pabx_str_all = ed.pabx_str
GROUP BY cte2.alf_pe, cte2.pabx_str_all, cte2.alt_str_dt;
ALTER TABLE sailw1169v.VB_7day_TARGET_TRIAL_PRE
ADD COLUMN PABX_str_all date
ADD COLUMN pabx_all_first_script date
ADD COLUMN pabx_end_all date;
MERGE into sailw1169v.VB_7day_TARGET_TRIAL_PRE AS coh
USING sailw1169v.tt_first_pabx_after_ruti AS pabx
ON coh.alf_pe = pabx.alf_pe
WHEN MATCHED THEN
UPDATE
SET (coh.PABX_str_all, coh.pabx_all_first_script, coh.pabx_end_all) = (pabx.PABX_str_all, pabx.pabx_all_first_script, pabx.pabx_end_all)
;
-------------------------------------------------------------------------------------------
-- add GP prescribing rate
ALTER TABLE sailw1169v.VB_7day_TARGET_TRIAL_PRE
ADD COLUMN GP_PRESC_RT double;
MERGE INTO sailw1169v.VB_7day_TARGET_TRIAL_PRE AS tt
USING
(SELECT mqo.*, CAST(abx_presc_rt AS decimal(5,3)) AS abx_presc_rt FROM (SELECT coh.*, reg.PRAC_CD_PE FROM sailw1169v.V15VB_COHORT1 AS coh
LEFT JOIN sail1169v.WLGP_CLEAN_GP_REG_BY_PRAC_INCLNONSAIL_MEDIAN_20220301 AS reg
ON coh.alf_pe = reg.alf_pe
AND coh.DIAG_DATE BETWEEN reg.START_DATE AND reg.END_DATE) AS mqo
LEFT JOIN sailw1169v.vb_gp_prescribing_rt AS rt
ON mqo.prac_cd_pe = rt.PRAC_CD_PE
ORDER BY alf_pe, diag_date) AS cte2
ON tt.alf_pe = cte2.alf_pe
WHEN MATCHED THEN
UPDATE
SET tt.gp_presc_rt = CAST(cte2.abx_presc_rt AS decimal(5,3));
-------------------------------------------------------------------------------------------
--add AMR in the 12 months prior to rUTI
ALTER table sailw1169v.VB_7day_TARGET_TRIAL_PRE
ADD COLUMN AMR_BASELINE integer;
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_PRE
SET AMR_BASELINE = 1
WHERE alf_pe IN
(SELECT tt.ALF_PE
FROM sailw1169v.VB_7day_TARGET_TRIAL_PRE AS tt
INNER JOIN SAILW1169V.COHORT_WRRS_RESULTS_AGREED AS wrrs
ON tt.ALF_PE = wrrs.ALF_PE
WHERE (TRIMETHOPRIM = 'Resistant'
OR NITROFURANTOIN = 'Resistant'
OR CEPHALEXIN = 'Resistant'
OR COAMOXICLAV = 'Resistant'
OR AMOXICILLIN = 'Resistant'
OR PIVMECILLINAM = 'Resistant'
OR FOSFOMYCIN = 'Resistant'
OR CIPROFLOXACIN = 'Resistant'
OR AMOXICILLIN_CLAVULANATE = 'Resistant')
AND wrrs.SPCM_COLLECTED_DT BETWEEN tt.DIAG_DATE - 365 days AND tt.DIAG_DATE);
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_PRE
SET AMR_BASELINE = CASE WHEN AMR_BASELINE IS NULL THEN 0
ELSE AMR_BASELINE
END;
-------------------------------------------------------------------------------------------
CALL fnc.drop_if_exists('session.VB_TT_MIN_DT');
DECLARE GLOBAL TEMPORARY TABLE session.VB_TT_MIN_DT
AS
(SELECT ALF_PE,
gp_end_date,
dod,
next_pabx_str,
dod AS study_end_dt,
dod AS followup_12mths
FROM sailw1169v.VB_7day_TARGET_TRIAL_PRE)
DEFINITION ONLY
ON COMMIT PRESERVE rows;
COMMIT;
INSERT INTO session.VB_TT_MIN_DT
SELECT alf_pe,
CASE WHEN gp_end_date IS NULL
THEN '2099-01-31'
ELSE gp_end_date
END,
CASE WHEN dod IS NULL
THEN '2099-01-31'
ELSE dod
end,
CASE WHEN next_pabx_str IS NULL
THEN '2099-01-31'
ELSE next_pabx_str
end,
'2020-12-31',
diag_date + 12 months
FROM sailw1169v.VB_7day_TARGET_TRIAL_PRE;
COMMIT;
CALL fnc.drop_if_exists('session.VB_TAB_MIN_PRE');
DECLARE GLOBAL TEMPORARY TABLE session.VB_TAB_MIN_PRE
(ALF_PE varchar(15),
ruti_diag_dt date,
CAL_Dt date,
first_abx_dt date,
PABX_str date,
PABX_END date,
GP_END_DT date,
study_end date,
dod date,
next_pabx_str date,
followup_12mths date,
cohort_end_reason varchar(10),
min_end_dt date,
PABX_str_all date,
pabx_all_first_script date,
pabx_end_all date)
ON COMMIT preserve rows;
COMMIT;
INSERT INTO session.VB_TAB_MIN_PRE
SELECT coh.ALF_PE,
coh.DIAG_DATE,
coh.DIAG_DATE,
coh.first_abx_dt,
coh.PABX_str,
coh.pabx_end,
coh.GP_END_DATE,
'2020-12-31',
coh.dod,
coh.NEXT_PABX_STR,
mdt.followup_12mths,
coh.cohort_end_reason,
CASE WHEN coh.DOD < mdt.followup_12mths
AND cohort_end_reason = 'DIED'
THEN coh.DOD --to account for where gp_end occurs day before death and leaving reason is assigned as died
ELSE least(mdt.gp_end_date, mdt.dod, mdt.study_end_dt, mdt.next_pabx_str, mdt.followup_12mths)
END,
coh.PABX_str_all,
coh.pabx_all_first_script,
coh.pabx_end_all
FROM sailw1169v.VB_7day_TARGET_TRIAL_PRE AS coh
INNER JOIN session.VB_TT_MIN_DT AS mdt
ON coh.alf_pe = mdt.alf_pe
WHERE diag_date IS NOT NULL;
COMMIT;
CALL fnc.drop_if_exists('sailw1169v.VB_7day_TARGET_TRIAL_PRE2');
CREATE TABLE sailw1169v.VB_7day_TARGET_TRIAL_PRE2
(ALF_PE varchar(15),
ruti_diag_dt date,
CAL_Dt date,
first_abx_dt date,
PABX_STR date,
PABX_END date,
gp_end_dt date,
STUDY_END date,
dod date,
next_pabx_str date,
cohort_end_reason varchar(10),
min_end_dt date,
PABX_str_all date,
pabx_all_first_script date,
pabx_end_all date
);
ALTER TABLE sailw1169v.VB_7day_TARGET_TRIAL_PRE2 activate NOT logged INITIALLY;
INSERT INTO sailw1169v.VB_7day_TARGET_TRIAL_PRE2
WITH cte (alf_pe, ruti_diag_dt, cal_dt, first_abx_dt, pabx_str, pabx_end, gp_end_dt, study_end,
dod, next_pabx_str, cohort_end_reason, min_end_dt, PABX_str_all, pabx_all_first_script, pabx_end_all) AS
(SELECT DISTINCT
alf_pe,
ruti_diag_dt,
cal_dt,
first_abx_dt,
pabx_str,
pabx_end,
gp_end_dt,
study_end,
dod,
next_pabx_str,
cohort_end_reason,
min_end_dt,
PABX_str_all,
pabx_all_first_script,
pabx_end_all
FROM session.VB_TAB_MIN_PRE
UNION ALL
SELECT cte.alf_pe AS alf_pe,
ruti_diag_dt,
add_days(cte.cal_dt,7) AS cal_dt,
cte.first_abx_dt,
cte.PABX_str,
cte.pabx_end,
cte.gp_end_dt,
cte.study_end,
cte.dod,
cte.next_pabx_str,
cte.cohort_end_reason,
cte.min_end_dt,
cte.PABX_str_all,
cte.pabx_all_first_script,
cte.pabx_end_all
FROM cte
WHERE cal_dt + 6 days < min_end_dt)
SELECT DISTINCT
alf_pe,
ruti_diag_dt,
cal_dt,
first_abx_dt,
pabx_str,
pabx_end,
gp_end_dt,
study_end,
dod,
next_pabx_str,
cohort_end_reason,
min_end_dt,
PABX_str_all,
pabx_all_first_script,
pabx_end_all
FROM cte
ORDER BY alf_pe, cal_dt;
ALTER TABLE sailw1169v.VB_7day_TARGET_TRIAL_PRE2
ADD COLUMN cal_time integer
ADD COLUMN LTF integer
ADD COLUMN death integer
ADD COLUMN study_ended integer
ADD COLUMN diag_12months integer
ADD COLUMN pabx integer
ADD COLUMN new_pabx integer
ADD COLUMN all_pabx integer;
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_PRE2
SET cal_time = -1 + row_number() OVER(PARTITION BY alf_pe ORDER BY cal_dt);
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_PRE2
SET pabx = CASE WHEN pabx_str IS null
THEN 0
WHEN cal_dt BETWEEN pabx_str AND pabx_end
THEN 1
WHEN pabx_str BETWEEN CAL_DT AND CAL_DT + 6 DAYS
THEN 1
ELSE 0
END;
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_PRE2
SET all_pabx = CASE WHEN pabx_str_all IS null
THEN 0
WHEN cal_dt BETWEEN pabx_str_all AND pabx_end_all
THEN 1
WHEN pabx_str_all BETWEEN CAL_DT AND CAL_DT + 6 DAYS
THEN 1
ELSE 0
END;
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_PRE2
SET death = CASE WHEN cohort_end_reason <> 'DIED'
OR cohort_end_reason IS NULL
THEN 0
WHEN cohort_end_reason = 'DIED'
AND dod between cal_dt AND cal_dt + 6 days
THEN 1
ELSE 0
END;
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_PRE2
SET ltf = CASE WHEN cohort_end_reason <> 'LTF'
OR cohort_end_reason IS NULL
THEN 0
WHEN cohort_end_reason = 'LTF'
AND gp_end_dt BETWEEN cal_dt AND cal_dt + 6 days
THEN 1
ELSE 0
END;
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_PRE2
SET study_ended = CASE WHEN cohort_end_reason <> 'STUDY END'
OR cohort_end_reason IS NULL
THEN 0
WHEN cohort_end_reason = 'STUDY END'
AND STUDY_END between cal_dt AND cal_dt + 6 days
THEN 1
ELSE 0
END;
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_PRE2
SET new_pabx = CASE WHEN cohort_end_reason <> 'NEW PABX'
OR cohort_end_reason IS NULL
THEN 0
WHEN cohort_end_reason = 'NEW PABX'
AND next_pabx_str BETWEEN cal_dt AND cal_dt + 6 days
THEN 1
ELSE 0
END;
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_PRE2
SET diag_12months = CASE WHEN cohort_end_reason <> 'DG +12mths'
OR cohort_end_reason IS NULL
THEN 0
WHEN cohort_end_reason = 'DG +12mths'
AND ruti_diag_dt + 12 months BETWEEN cal_dt AND cal_dt + 6 days
THEN 1
ELSE 0
END;
-----------------------------------------------------------------------------
--gp UTIs in prev 12 months
ALTER TABLE sailw1169v.VB_7day_TARGET_TRIAL_PRE
ADD COLUMN gp_uti_pre integer
ADD COLUMN pedw_uti_pre integer;
MERGE into sailw1169v.VB_7day_TARGET_TRIAL_PRE AS ttp
using
(SELECT tt.alf_pe, count(jny.alf_pe) AS uti_count FROM
(SELECT distinct gp.alf_pe, gp.event_str_dt, gp.event_end_dt, gp.data_source
FROM SAILW1169V.VB_WLGP_UTI_ALL_DATE AS gp
left JOIN (SELECT distinct alf_pe, event_str_dt, event_end_dt, data_source FROM SAILW1169V.VB_PEDW_UTI_ALL_DATE) AS pd
ON gp.alf_pe = pd.alf_pe
WHERE (pd.alf_pe IS NULL
OR gp.EVENT_STR_DT NOT BETWEEN pd.event_str_dt + 1 DAY AND pd.event_end_dt)) AS jny
INNER JOIN sailw1169v.VB_7day_TARGET_TRIAL_PRE AS tt
ON tt.alf_pe = jny.alf_pe
WHERE (jny.event_str_dt BETWEEN tt.diag_date - 1 YEAR AND tt.diag_date)
AND data_source = 'WLGP'
GROUP BY tt.alf_pe) AS gp
ON ttp.alf_pe = gp.alf_pe
WHEN MATCHED THEN
UPDATE
SET ttp.gp_uti_pre = gp.uti_count
;
---------------------------------------------------------------------------------
--pedw UTIs in prev 12 months
--looks at UTIs with an end date in the prior 12 months
MERGE into sailw1169v.VB_7day_TARGET_TRIAL_PRE AS ttp
using
(SELECT tt.alf_pe, count(jny.alf_pe) AS uti_count FROM
(SELECT distinct alf_pe, event_str_dt, event_end_dt, data_source FROM SAILW1169V.VB_PEDW_UTI_ALL_DATE) AS jny
INNER JOIN sailw1169v.VB_7day_TARGET_TRIAL_PRE AS tt
ON tt.alf_pe = jny.alf_pe
WHERE (jny.event_end_dt BETWEEN tt.diag_date - 1 YEAR AND tt.diag_date
OR jny.event_str_dt BETWEEN tt.diag_date - 1 YEAR AND tt.diag_date)
AND data_source = 'PEDW'
GROUP BY tt.alf_pe) AS gp
ON ttp.alf_pe = gp.alf_pe
WHEN MATCHED THEN
UPDATE
SET ttp.pedw_uti_pre = gp.uti_count
;
------------------------------------------------------------------------
--identify outcomes FOR target trial
-------------------------------------------------------------------------
--AMR hospitalisation
--identified AS ANY PEDW diag code recorded FOR antimicrobial resistance
--FROM pAbx START
---------------------------------------------------
--hospitalisation with an AMR infection
--episode with AMR diagnosis code must start within 2 days of admission
--and must not occur within 3 days of a prior hospital discharge
CALL FNC.DROP_IF_EXISTS('SESSION.VB_PEDW_ABX_RES');
DECLARE GLOBAL TEMPORARY TABLE SESSION.VB_PEDW_ABX_RES
AS (SELECT * FROM SAIL1169V.PEDW_DIAG_20210704) DEFINITION ONLY
ON COMMIT PRESERVE ROWS;
Commit;
INSERT INTO SESSION.VB_PEDW_ABX_RES
SELECT * FROM SAIL1169V.PEDW_DIAG_20210704 AS diag
WHERE diag.DIAG_CD_1234 IN ('U820',
'U821',
'U822',
'U828',
'U829',
'U830',
'U830',
'U831',
'U832',
'U837',
'U838',
'U839',
'U847',
'U848',
'U849',
'U800',
'U801',
'U808',
'U810',
'U818',
'U890',
'U898',
'U899',
'U880');
Commit;
CALL FNC.DROP_IF_EXISTS('SESSION.VB_PEDW_EPS_ABX_RES');
DECLARE GLOBAL TEMPORARY TABLE SESSION.VB_PEDW_EPS_ABX_RES
AS (SELECT eps.PROV_UNIT_CD,
eps.SPELL_NUM_PE,
eps.EPI_NUM,
diag.DIAG_CD_1234,
eps.EPI_STR_DT,
eps.EPI_END_DT,
eps.EPI_DUR
FROM SAIL1169V.PEDW_EPISODE_20210704 AS EPS,
SAIL1169V.PEDW_DIAG_20210704 AS diag) DEFINITION ONLY
ON COMMIT PRESERVE ROWS;
Commit;
INSERT INTO SESSION.VB_PEDW_EPS_ABX_RES
(PROV_UNIT_CD,
SPELL_NUM_PE,
EPI_NUM,
DIAG_CD_1234,
EPI_STR_DT,
EPI_END_DT,
EPI_DUR)
SELECT eps.PROV_UNIT_CD,
eps.SPELL_NUM_PE,
eps.EPI_NUM,
diag.DIAG_CD_1234,
eps.EPI_STR_DT,
eps.EPI_END_DT,
eps.EPI_DUR
FROM SESSION.VB_PEDW_ABX_RES AS diag
LEFT JOIN SAIL1169V.PEDW_EPISODE_20210704 AS eps
ON diag.PROV_UNIT_CD = eps.PROV_UNIT_CD
AND diag.SPELL_NUM_PE = eps.SPELL_NUM_PE
AND diag.EPI_NUM = eps.EPI_NUM
WHERE eps.EPI_STR_DT BETWEEN '2015-01-01' AND '2020-12-31';
Commit;
CALL FNC.DROP_IF_EXISTS('sailw1169v.VB_7day_PEDW_ABX_RES');
CREATE TABLE sailw1169v.VB_7day_PEDW_ABX_RES AS (SELECT
sp.ALF_PE,
sp.ALF_STS_CD,
sp.PROV_UNIT_CD,
sp.SPELL_NUM_PE,
sp.GNDR_CD AS PEDW_GNDR_CD,
sp.ADMIS_DT,
sp.DISCH_DT,
sp.SPELL_DUR,
eps.EPI_NUM,
eps.EPI_STR_DT,
eps.EPI_END_DT,
eps.EPI_DUR,
diag.DIAG_CD_1234
FROM SAIL1169V.PEDW_SPELL_20210704 AS sp,
SAIL1169V.PEDW_EPISODE_20210704 AS eps,
SAIL1169V.PEDW_DIAG_20210704 AS diag) WITH NO DATA;
alter table sailw1169v.VB_7day_PEDW_ABX_RES activate not logged INITIALLY;
INSERT INTO sailw1169v.VB_7day_PEDW_ABX_RES
SELECT sp.ALF_PE,
sp.ALF_STS_CD,
sp.PROV_UNIT_CD,
sp.SPELL_NUM_PE,
sp.GNDR_CD,
sp.ADMIS_DT,
sp.DISCH_DT,
sp.SPELL_DUR,
eps.EPI_NUM,
eps.EPI_STR_DT,
eps.EPI_END_DT,
eps.EPI_DUR,
eps.DIAG_CD_1234
FROM SAIL1169V.PEDW_SPELL_20210704 AS sp
RIGHT JOIN SESSION.VB_PEDW_EPS_ABX_RES AS eps
ON sp.PROV_UNIT_CD = eps.PROV_UNIT_CD
AND sp.SPELL_NUM_PE = eps.SPELL_NUM_PE
INNER JOIN sailw1169v.VB_7day_TARGET_TRIAL_PRE AS coh
ON sp.ALF_PE = coh.ALF_PE
WHERE (eps.epi_str_dt BETWEEN coh.diag_date + 1 day AND '2020-12-31')
AND (eps.epi_str_dt BETWEEN admis_dt AND admis_dt + 2 DAYS);
---------------------------------------------------------------------------------------
--delete where there is a prior hospital discharge within 3 days of diagnosis (episode start date)
DELETE FROM sailw1169v.VB_7day_PEDW_ABX_RES AS coh
WHERE EXISTS
(SELECT mqo.alf_pe, mqo.epi_str_dt FROM
(SELECT amr.alf_pe, sp.disch_dt, amr.EPI_STR_DT, sp.DISCH_DT AS prior_disch, amr.DISCH_DT
FROM sailw1169v.VB_7day_PEDW_ABX_RES AS amr
INNER JOIN sail1169v.PEDW_SPELL_20210704 AS sp
ON amr.ALF_PE = sp.ALF_PE
and (amr.EPI_STR_DT BETWEEN sp.DISCH_DT AND sp.DISCH_DT + 3 DAYS)
AND amr.SPELL_NUM_PE <> sp.SPELL_NUM_PE --different spell_num_pe required so that episode start on same day as discharge are not excluded
) AS mqo
WHERE coh.alf_pe = mqo.alf_pe
AND coh.EPI_STR_DT = mqo.epi_str_dt);
---------------------------------------------------------------------------------------
--delete all but first episode start (event start date) for ABX_RES
DELETE FROM
(SELECT ROWNUMBER() OVER(PARTITION BY ALF_PE ORDER BY EPI_STR_DT) AS rn
FROM sailw1169v.VB_7day_PEDW_ABX_RES) AS mqo
WHERE rn > 1;
COMMIT;
-----------------------------------------------------------------------------
--create table for target trial hospital AMR outcome
CALL fnc.drop_if_exists('sailw1169v.VB_7day_TARGET_TRIAL_HOSP_AMR');
CREATE TABLE sailw1169v.VB_7day_TARGET_TRIAL_HOSP_AMR
AS (SELECT * FROM sailw1169v.VB_7day_TARGET_TRIAL_PRE2)
WITH NO DATA;
INSERT INTO sailw1169v.VB_7day_TARGET_TRIAL_HOSP_AMR
SELECT * FROM sailw1169v.VB_7day_TARGET_TRIAL_PRE2;
--update target trial table with amr date
ALTER TABLE sailw1169v.VB_7day_TARGET_TRIAL_HOSP_AMR
ADD COLUMN AMR_dt date
ADD COLUMN AMR integer;
MERGE INTO sailw1169v.VB_7day_TARGET_TRIAL_HOSP_AMR AS tt
USING (SELECT DISTINCT alf_pe, epi_str_dt FROM sailw1169v.VB_7day_PEDW_ABX_RES) AS amr
ON tt.alf_pe = amr.alf_pe
WHEN MATCHED THEN
UPDATE
SET tt.amr_dt = amr.epi_str_dt
;
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_HOSP_AMR
SET amr = CASE WHEN amr_dt IS null
THEN 0
WHEN (amr_dt > dod
OR amr_dt > GP_END_DT
OR amr_dt > study_end
OR amr_dt > ruti_diag_dt + 12 months)
THEN 0
WHEN amr_dt IS NOT null
AND amr_dt between cal_dt AND cal_dt + 6 DAYS
THEN 1
ELSE 0
END;
--update table to ensure only the first outcome is flagged if occuring in the same cal_time
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_HOSP_AMR
SET death = CASE WHEN amr = 1
THEN 0
ELSE DEATH
END;
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_HOSP_AMR
SET ltf = CASE WHEN amr = 1
THEN 0
ELSE LTF
END;
UPDATE sailw1169v.VB_7day_TARGET_TRIAL_HOSP_AMR
SET study_ended = CASE WHEN amr = 1
THEN 0