0% found this document useful (0 votes)
21 views

Life Query

This SQL query selects patient data from various tables to populate fields for analysis within specific date parameters. It joins data from tables including visits, patients, appointments, status, and more. The highest level fields selected are patient ID, last visit age, pediatric status, and several indicator fields assessing eligibility, samples drawn, results, and current treatment status.

Uploaded by

captainricardus
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
21 views

Life Query

This SQL query selects patient data from various tables to populate fields for analysis within specific date parameters. It joins data from tables including visits, patients, appointments, status, and more. The highest level fields selected are patient ID, last visit age, pediatric status, and several indicator fields assessing eligibility, samples drawn, results, and current treatment status.

Uploaded by

captainricardus
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 15

PARAMETERS [@StartDate] DATETIME, [@EndDate] DATETIME;

SELECT

[TX_CURR].[PatientID],

[TX_CURR].[LastVisitAge],

[TX_CURR].[Pediatric],

IIF([TX_CURR].[LastVisitAge] >= 20,'YES',NULL) AS [TX_CURR_GT20],

[TX_CURR].[LastVisitdate],

[TX_CURR].[NumDaysDispensed@LastNumDaysDispensedDate] AS LastNumDaysDispensed,

LAST_VISIT.VisitTypeCode AS LastVisitTypeCode,

LAST_VISIT.NowPregnant,

LAST_VISIT.NowBreastfeeding,

[TX_CURR].[LastStatus],

[TX_CURR].[ExpectedNextVisitDate],

LAST_12MONTHS_HVL_TESTS.TestDate AS LastTestDate,

LAST_12MONTHS_HVL_TESTS.ResultNumeric AS LastResultNumeric,

LAST_12MONTHS_HVL_TESTS_RESULTS.TestDate AS LastTestDateWithResults,

LAST_12MONTHS_HVL_TESTS_RESULTS.ResultNumeric AS LastResultNumericWithResults,

IIF([NOT_ELIGIBLE_HVL].[PatientID] IS NULL, 'YES', NULL) AS [VL_ELIG],

IIF([NOT_ELIGIBLE_HVL].[PatientID] IS NULL AND [LAST_12MONTHS_HVL_TESTS].[PatientID] IS


NOT NULL, 'YES', NULL) AS [VL_SAMPLE],

IIF([NOT_ELIGIBLE_HVL].[PatientID] IS NULL AND [LAST_12MONTHS_HVL_TESTS_RESULTS].


[ResultNumeric] IS NOT NULL, 'YES',NULL) AS [VL_D],

IIF([NOT_ELIGIBLE_HVL].[PatientID] IS NULL AND [LAST_12MONTHS_HVL_TESTS_RESULTS].


[ResultNumeric] < 1000, 'YES', NULL) AS [VL_N],

IIF([NOT_ELIGIBLE_HVL].[PatientID] IS NULL AND [LAST_12MONTHS_HVL_TESTS].


[ResultNumeric] IS NOT NULL, 'YES',NULL) AS [VL_D_LAST],
IIF([NOT_ELIGIBLE_HVL].[PatientID] IS NULL AND [LAST_12MONTHS_HVL_TESTS].
[ResultNumeric] < 1000, 'YES', NULL) AS [VL_N_LAST]

FROM (((

(SELECT

VisitWithin12Months.PatientID

,LastVisitsDate.LastVisitdate

,ROUND(DATEDIFF('D',tblPatients.DateOfBirth,LastVisitsDate.LastVisitdate)/365, 1) AS
LastVisitAge

,LastARVStatusCode_AND_CurrentOnARTAtLastVisit.LastARVStatusCodeDate

,LastARVStatusCode_AND_CurrentOnARTAtLastVisit.LastARVStatusCode

,LastARVStatusCode_AND_CurrentOnARTAtLastVisit.CurrentOnARTAtLastVisit

,IIF(EverOnART.PatientID IS NOT NULL, 'YES', NULL) AS EverOnART

,DateOfAppointmentAtLastDateAppointmentGiven.DateAppointmentGiven AS
LastDateAppointmentGiven

,DateOfAppointmentAtLastDateAppointmentGiven.LastDateAppointmentGiven AS
[DateOfAppointment@LastDateAppointmentGiven]

,CancelledDateOfAppointmentAtLastDateAppointmentGiven.LastDateAppointmentGive
n AS [CancelledDateOfAppointment@LastDateAppointmentGiven]

,ExpectedAppointmentDate.ExpectedAppointmentDate

,NumDaysDispensedAtLastNumDaysDispensedDate.LastNumDaysDispensedDate

,NumDaysDispensedAtLastNumDaysDispensedDate.LastNumDaysDispensed AS
[NumDaysDispensed@LastNumDaysDispensedDate]

,ExpectedNumDaysDispensedDate.ExpectedNumDaysDispensedDate

,IIF(ExpectedAppointmentDate IS NULL AND ExpectedNumDaysDispensedDate IS NOT


NULL,

ExpectedNumDaysDispensedDate,
IIF(ExpectedAppointmentDate IS NOT NULL AND
ExpectedNumDaysDispensedDate IS NULL,

ExpectedAppointmentDate,

IIF(ExpectedAppointmentDate IS NULL AND


ExpectedNumDaysDispensedDate IS NULL,

DATEADD("D", 30, LastVisitsDate.LastVisitDate),

IIF(ExpectedAppointmentDate <
ExpectedNumDaysDispensedDate,

ExpectedNumDaysDispensedDate,

IIF(ExpectedAppointmentDate >=
ExpectedNumDaysDispensedDate,

ExpectedAppointmentDate,

NULL))))) AS ExpectedNextVisitDate

,DATEADD("D", IIF(LastStatus.Status = 'Transferred to another clinic',0,30),

IIF(ExpectedAppointmentDate IS NULL AND ExpectedNumDaysDispensedDate IS NOT


NULL,

ExpectedNumDaysDispensedDate,

IIF(ExpectedAppointmentDate IS NOT NULL AND


ExpectedNumDaysDispensedDate IS NULL,

ExpectedAppointmentDate,

IIF(ExpectedAppointmentDate IS NULL AND


ExpectedNumDaysDispensedDate IS NULL,

DATEADD("D", 30, LastVisitsDate.LastVisitDate),

IIF(ExpectedAppointmentDate <
ExpectedNumDaysDispensedDate,

ExpectedNumDaysDispensedDate,

IIF(ExpectedAppointmentDate >=
ExpectedNumDaysDispensedDate,

ExpectedAppointmentDate,

NULL)))))) AS DateToBeLost
,LastStatus.Status AS LastStatus

,LastStatus.StatusDate AS LastStatusDate

,IIF(ROUND(DATEDIFF('D',tblPatients.DateOfBirth,LastVisitsDate.LastVisitdate)/365,
1)<15,'YES',NULL) AS Pediatric

,IIF(LastARVStatusCode_AND_CurrentOnARTAtLastVisit.CurrentOnARTAtLastVisit IS NOT
NULL

AND DATEADD("D", IIF(LastStatus.Status = 'Transferred to another clinic',0,30),

IIF(ExpectedAppointmentDate IS NULL AND


ExpectedNumDaysDispensedDate IS NOT NULL,

ExpectedNumDaysDispensedDate,

IIF(ExpectedAppointmentDate IS NOT NULL AND


ExpectedNumDaysDispensedDate IS NULL,

ExpectedAppointmentDate,

IIF(ExpectedAppointmentDate IS NULL AND


ExpectedNumDaysDispensedDate IS NULL,

DATEADD("D", 30, LastVisitsDate.LastVisitDate),

IIF(ExpectedAppointmentDate <
ExpectedNumDaysDispensedDate,

ExpectedNumDaysDispensedDate,

IIF(ExpectedAppointmentDate >=
ExpectedNumDaysDispensedDate,

ExpectedAppointmentDate,

NULL)))))) >= [@EndDate]

AND (LastStatus.Status IS NULL OR LastStatus.Status <> 'Died'), 'YES', NULL) AS


TX_CURR

FROM

(((((((((((((SELECT tblVisits.PatientID

FROM tblVisits
WHERE

(tblVisits.VisitDate <= [@EndDate])

AND (DATEADD("D", 720, tblVisits.VisitDate) >= DATEADD("D", -30,


[@EndDate]))

GROUP BY tblVisits.PatientID) AS VisitWithin12Months

LEFT JOIN tblPatients ON tblPatients.PatientID = VisitWithin12Months.PatientID)

LEFT JOIN

(SELECT tblVisits.PatientID, MAX(tblVisits.VisitDate) AS LastVisitdate

FROM tblVisits

WHERE (tblVisits.VisitDate <= [@EndDate])

GROUP BY tblVisits.PatientID) AS LastVisitsDate

ON VisitWithin12Months.PatientID = LastVisitsDate.PatientID)

LEFT JOIN

(SELECT tblVisits.PatientID, MAX(tblVisits.VisitDate) AS LastARVStatusCodeDate

FROM tblVisits

WHERE (tblVisits.ARVStatusCode IS NOT NULL) AND (tblVisits.VisitDate <= [@EndDate])

GROUP BY tblVisits.PatientID) AS LastARVStatusCodeDate

ON LastARVStatusCodeDate.PatientID = VisitWithin12Months.PatientID)

LEFT JOIN (SELECT DISTINCT tblVisits.PatientID

FROM tblVisits

WHERE tblVisits.ARVStatusCode IN (2,3,4,5,6,7,8,9,10)) AS EverOnART ON EverOnART.PatientID


= VisitWithin12Months.PatientID)
LEFT JOIN

(SELECT T.PatientID, MAX(T.DateAppointmentGiven) AS DateAppointmentGiven

FROM

(SELECT

tblAppointments.PatientID

,tblAppointments.DateAppointmentGiven

,tblAppointments.DateOfAppointment

FROM tblAppointments

WHERE

(tblAppointments.DateAppointmentGiven <= [@EndDate])

AND (tblAppointments.DateAppointmentGiven IS NOT NULL)

AND (tblAppointments.DateOfAppointment IS NOT NULL)) AS T

GROUP BY T.PatientID) AS LastDateAppointmentsGiven

ON LastDateAppointmentsGiven.PatientID = VisitWithin12Months.PatientID)

LEFT JOIN

(SELECT T_2.PatientID, MAX(T_2.VisitDate) AS LastNumDaysDispensedDate

FROM

(SELECT tblVisits.PatientID, tblVisits.NumDaysDispensed, tblVisits.VisitDate

FROM tblVisits

WHERE (tblVisits.VisitDate <= [@EndDate]) AND (NumDaysDispensed IS NOT


NULL)) AS T_2

GROUP BY T_2.PatientID) AS LastNumDaysDispensedDate

ON LastNumDaysDispensedDate.PatientID = VisitWithin12Months.PatientID)

LEFT JOIN (SELECT tblStatus.*


FROM tblStatus

INNER JOIN

(SELECT tblStatus.PatientID, MAX(tblStatus.StatusDate) AS DateLastStatus

FROM tblStatus

WHERE tblStatus.StatusDate <= [@EndDate]

GROUP BY tblStatus.PatientID) AS STATUS

ON (STATUS.PatientID = tblStatus.PatientID) AND (tblStatus.StatusDate =


STATUS.DateLastStatus)) AS LastStatus ON LastStatus.PatientID = VisitWithin12Months.PatientID)

LEFT JOIN

(SELECT

tblAppointments.PatientID

,LastDateAppointmentsGiven.DateAppointmentGiven

,MAX(tblAppointments.DateOfAppointment) AS LastDateAppointmentGiven

FROM tblAppointments

INNER JOIN

(SELECT T.PatientID, MAX(T.DateAppointmentGiven) AS DateAppointmentGiven

FROM

(SELECT

tblAppointments.PatientID

,tblAppointments.DateAppointmentGiven

,tblAppointments.DateOfAppointment

FROM tblAppointments

WHERE

tblAppointments.DateAppointmentGiven <= [@EndDate]

AND tblAppointments.DateAppointmentGiven IS NOT NULL

AND tblAppointments.DateOfAppointment IS NOT NULL) AS T

GROUP BY T.PatientID) AS LastDateAppointmentsGiven


ON

tblAppointments.PatientID = LastDateAppointmentsGiven.PatientID

AND tblAppointments.DateAppointmentGiven =
LastDateAppointmentsGiven.DateAppointmentGiven

GROUP BY tblAppointments.PatientID,
LastDateAppointmentsGiven.DateAppointmentGiven)

AS DateOfAppointmentAtLastDateAppointmentGiven

ON DateOfAppointmentAtLastDateAppointmentGiven.PatientID =
VisitWithin12Months.PatientID)

LEFT JOIN

(SELECT

tblAppointments.PatientID,

MAX(IIF(LastDateAppointmentsGiven.DateAppointmentGiven IS NOT NULL,


'YES', NULL)) AS LastDateAppointmentGiven

FROM tblAppointments

INNER JOIN

(SELECT T.PatientID, MAX(T.DateAppointmentGiven) AS DateAppointmentGiven

FROM

(SELECT

tblAppointments.PatientID

,tblAppointments.DateAppointmentGiven

,tblAppointments.DateOfAppointment

FROM tblAppointments

WHERE

tblAppointments.DateAppointmentGiven <= [@EndDate]

AND tblAppointments.DateAppointmentGiven IS NOT NULL

AND tblAppointments.DateOfAppointment IS NOT NULL) AS T

GROUP BY T.PatientID) AS LastDateAppointmentsGiven


ON

tblAppointments.PatientID = LastDateAppointmentsGiven.PatientID

AND tblAppointments.DateAppointmentGiven =
LastDateAppointmentsGiven.DateAppointmentGiven

WHERE tblAppointments.Cancelled = -1

GROUP BY tblAppointments.PatientID)

AS CancelledDateOfAppointmentAtLastDateAppointmentGiven

ON CancelledDateOfAppointmentAtLastDateAppointmentGiven.PatientID =
VisitWithin12Months.PatientID)

LEFT JOIN (SELECT A.PatientID, MAX(A.DateOfAppointment) AS ExpectedAppointmentDate

FROM

(SELECT

tblAppointments.PatientID,

tblAppointments.DateAppointmentGiven,

tblAppointments.DateOfAppointment,

tblAppointments.Cancelled,

DATEDIFF("D", LastVisit.VisitDate, tblAppointments.DateAppointmentGiven) AS d,

DATEDIFF("D", tblAppointments.DateAppointmentGiven,
tblAppointments.DateOfAppointment) AS d1

FROM tblAppointments

INNER JOIN (SELECT tblVisits.*

FROM tblVisits

INNER JOIN

(SELECT tblVisits.PatientID, MAX(tblVisits.VisitDate) AS VisitDate

FROM tblVisits

WHERE tblVisits.VisitDate<=[@EndDate]

GROUP BY tblVisits.PatientID) AS LV
ON LV.PatientID=tblVisits.PatientID AND LV.VisitDate=tblVisits.VisitDate) AS LastVisit ON
LastVisit.PatientID = tblAppointments.PatientID

WHERE

tblAppointments.DateAppointmentGiven <= [@EndDate]

AND (tblAppointments.Cancelled IS NULL OR tblAppointments.Cancelled = 0)

AND DATEDIFF("D", LastVisit.VisitDate, tblAppointments.DateAppointmentGiven) < 90

AND tblAppointments.DateOfAppointment > LastVisit.VisitDate

AND DATEDIFF("D", tblAppointments.DateAppointmentGiven,


tblAppointments.DateOfAppointment) > 0

AND DATEDIFF("D", tblAppointments.DateAppointmentGiven,


tblAppointments.DateOfAppointment) < 210

) AS A

GROUP BY A.PatientID) AS ExpectedAppointmentDate

ON ExpectedAppointmentDate.PatientID = VisitWithin12Months.PatientID)

LEFT JOIN (SELECT T.PatientID, MAX(T.NumDaysDispensedDate) AS


ExpectedNumDaysDispensedDate

FROM

(SELECT

tblVisits.PatientID,

tblVisits.NumDaysDispensed,

tblVisits.VisitDate,

DATEADD("D", tblVisits.NumDaysDispensed, tblVisits.VisitDate) AS NumDaysDispensedDate,

LastVisitDate.VisitDate AS LastVisitDate

FROM tblVisits

LEFT JOIN (SELECT tblVisits.*

FROM tblVisits

INNER JOIN

(SELECT tblVisits.PatientID, MAX(tblVisits.VisitDate) AS VisitDate

FROM tblVisits
WHERE tblVisits.VisitDate<=[@EndDate]

GROUP BY tblVisits.PatientID) AS LV

ON LV.PatientID=tblVisits.PatientID AND LV.VisitDate=tblVisits.VisitDate) AS LastVisitDate

ON tblVisits.PatientID = LastVisitDate.PatientID

WHERE

tblVisits.VisitDate <= [@EndDate]

AND tblVisits.NumDaysDispensed IS NOT NULL

AND tblVisits.NumDaysDispensed >= 0

AND tblVisits.NumDaysDispensed < 210) AS T

WHERE T.NumDaysDispensedDate > T.LastVisitDate

GROUP BY T.PatientID) AS ExpectedNumDaysDispensedDate

ON ExpectedNumDaysDispensedDate.PatientID = VisitWithin12Months.PatientID)

LEFT JOIN

(SELECT

tblVisits.PatientID,

LastNumDayssDispensedDate.VisitDate AS LastNumDaysDispensedDate,

MAX(tblVisits.NumDaysDispensed) AS LastNumDaysDispensed

FROM tblVisits

INNER JOIN

(SELECT T.PatientID, MAX(T.VisitDate) AS VisitDate

FROM

(SELECT tblVisits.PatientID, tblVisits.NumDaysDispensed,


tblVisits.VisitDate

FROM tblVisits

WHERE

tblVisits.VisitDate <= [@EndDate]

AND tblVisits.NumDaysDispensed IS NOT NULL) AS T


GROUP BY T.PatientID) AS LastNumDayssDispensedDate

ON

LastNumDayssDispensedDate.PatientID = tblVisits.PatientID

AND LastNumDayssDispensedDate.VisitDate = tblVisits.VisitDate

GROUP BY tblVisits.PatientID, LastNumDayssDispensedDate.VisitDate) AS


NumDaysDispensedAtLastNumDaysDispensedDate

ON NumDaysDispensedAtLastNumDaysDispensedDate.PatientID =
VisitWithin12Months.PatientID)

LEFT JOIN

(SELECT

tblVisits.PatientID

,LastARVStatusCodeDates.LastARVStatusCodeDate

,tblVisits.ARVStatusCode AS LastARVStatusCode

, IIF(tblVisits.ARVStatusCode IN (1,5), NULL, 'YES') AS CurrentOnARTAtLastVisit

FROM tblVisits

INNER JOIN

(SELECT tblVisits.PatientID, MAX(tblVisits.VisitDate) AS LastARVStatusCodeDate

FROM tblVisits

WHERE (tblVisits.ARVStatusCode IS NOT NULL) AND (tblVisits.VisitDate <=


[@EndDate])

GROUP BY tblVisits.PatientID) AS LastARVStatusCodeDates

ON

LastARVStatusCodeDates.PatientID = tblVisits.PatientID

AND LastARVStatusCodeDates.LastARVStatusCodeDate = tblVisits.VisitDate)

AS LastARVStatusCode_AND_CurrentOnARTAtLastVisit

ON LastARVStatusCode_AND_CurrentOnARTAtLastVisit.PatientID =
VisitWithin12Months.PatientID) AS TX_CURR
LEFT JOIN

(SELECT tblTests.*

FROM tblTests

INNER JOIN

(SELECT tblTests.PatientID, MAX(tblTests.TestDate) AS TestDate

FROM tblTests

WHERE tblTests.TestTypeID = 'VRL' AND tblTests.TestDate BETWEEN DATEADD("D",-


1,DATEADD("M", -12, DATEADD("D",1,[@EndDate]))) AND [@EndDate]

GROUP BY tblTests.PatientID) AS LT

ON LT.PatientID = tblTests.PatientID AND LT.TestDate = tblTests.TestDate

WHERE tblTests.TestTypeID = 'VRL') AS LAST_12MONTHS_HVL_TESTS

ON LAST_12MONTHS_HVL_TESTS.PatientID = TX_CURR.PatientID)

LEFT JOIN

(SELECT tblTests.*

FROM tblTests

INNER JOIN

(SELECT tblTests.PatientID, MAX(tblTests.TestDate) AS TestDate

FROM tblTests

WHERE tblTests.TestTypeID = 'VRL' AND tblTests.ResultNumeric IS NOT NULL AND


tblTests.TestDate BETWEEN DATEADD("D",-1,DATEADD("M", -12, DATEADD("D",1,[@EndDate]))) AND
[@EndDate]

GROUP BY tblTests.PatientID) AS LT

ON LT.PatientID = tblTests.PatientID AND LT.TestDate = tblTests.TestDate

WHERE tblTests.TestTypeID = 'VRL') AS LAST_12MONTHS_HVL_TESTS_RESULTS

ON LAST_12MONTHS_HVL_TESTS_RESULTS.PatientID = TX_CURR.PatientID)

LEFT JOIN

(SELECT

RECENTLY_INITIATED.PatientID,
RECENTLY_INITIATED.NowPregnant,

RECENTLY_INITIATED.NowBreastfeeding,

RECENTLY_INITIATED.DaysOnART

FROM

(SELECT

EARLIEST_VISITS.PatientID,

EARLIEST_VISITS.NowPregnant,

EARLIEST_VISITS.NowBreastfeeding,

IIF(EARLIEST_ON_ART_ANOTHER_CLINIC.PatientID IS NULL,

DATEDIFF("D", EARLIEST_VISITS.VisitDate, [@EndDate]),

IIF (EARLIEST_ON_ART_ANOTHER_CLINIC.DateStartARTAtAnotherClinic
< EARLIEST_VISITS.VisitDate,

DATEDIFF("D",
EARLIEST_ON_ART_ANOTHER_CLINIC.DateStartARTAtAnotherClinic, [@EndDate]),

DATEDIFF("D", EARLIEST_VISITS.VisitDate, [@EndDate]))) AS


DaysOnART

FROM

(SELECT tblVisits.*

FROM tblVisits

INNER JOIN

(SELECT tblVisits.PatientID, MIN(tblVisits.VisitDate) AS


EarliestDateOnART

FROM tblVisits

WHERE tblVisits.ARVStatusCode > 1 AND tblVisits.VisitDate <=


[@EndDate]

GROUP BY tblVisits.PatientID) AS LV

ON LV.PatientID = tblVisits.PatientID AND LV.EarliestDateOnART =


tblVisits.VisitDate) AS EARLIEST_VISITS

LEFT JOIN
(SELECT tblStartARTanotherClinic.PatientID,
tblStartARTanotherClinic.DateStartARTAtAnotherClinic

FROM tblStartARTanotherClinic

WHERE tblStartARTanotherClinic.DateStartARTAtAnotherClinic <= [@EndDate])


AS EARLIEST_ON_ART_ANOTHER_CLINIC

ON EARLIEST_ON_ART_ANOTHER_CLINIC.PatientID =
EARLIEST_VISITS.PatientID) AS RECENTLY_INITIATED

WHERE (RECENTLY_INITIATED.DaysOnART < 90 AND (RECENTLY_INITIATED.NowPregnant = 'Yes'


OR RECENTLY_INITIATED.NowBreastfeeding = 'Yes'))

OR (RECENTLY_INITIATED.DaysOnART <= 180 AND ((RECENTLY_INITIATED.NowPregnant


= 'No' OR RECENTLY_INITIATED.NowPregnant IS NULL) AND (RECENTLY_INITIATED.NowBreastfeeding =
'No' OR RECENTLY_INITIATED.NowBreastfeeding IS NULL)))) AS NOT_ELIGIBLE_HVL

ON NOT_ELIGIBLE_HVL.PatientID = TX_CURR.PatientID)

LEFT JOIN tblVisits AS LAST_VISIT ON LAST_VISIT.PatientID = TX_CURR.PatientID AND


LAST_VISIT.VisitDate = TX_CURR.LastVisitdate

WHERE TX_CURR.TX_CURR = 'YES'

You might also like