Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations derfloh on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

SQL Conditional Sum

Status
Not open for further replies.

agorjest1

Programmer
Joined
Mar 29, 2022
Messages
1
Location
US
Hello,
I am trying to determine the total count of catheter days in February. My SQL query below intentionally adds a +1 to the # of days summing code to account for each day a patient had a catheter in.
But for patients that changed status several times in a month, it is adding 1 day for each row, so that when I want to sum the total days for the month it is adding 2 extra days. I need to identify
patients that have had their status change more than once and then subtract one day for each time (each extra row). I have tried to do this in SQL Server Reporting Services in a group expression
but I can't get it to not count those extra days. A solution either with a straight SQL Query or in SSRS would work. Results for one sample patient below, full query below that.


PatID StartDate EndDate Type of Line Insert Dt Remv Dt Pt Status # Cath Days Cath Days for Feb
10215 2016-09-30 2022-02-21 Power Port 2016-11-22 NULL Active 21 30 (Should be 28)
10215 2022-02-21 2022-02-22 Power Port 2016-11-22 NULL Hospitalized 2
10215 2022-02-22 NULL Power Port 2016-11-22 NULL Active 7




WITH STAT AS
(
select
Pt.PtKey, ptid, PtPtInfusionStatus.ModifiedDate, PtInfusionStatus.Name, Pt.PersonKey, PtInfusionStatus.PtInfusionStatusKey, PtPtInfusionStatus.StartDate, PtPtInfusionStatus.EndDate

from Pt left join PtPtInfusionStatus on PtPtInfusionStatus.PtKey = pt.PtKey
left join PtInfusionStatus on ptinfusionstatus.PtInfusionStatusKey = PtPtInfusionStatus.PtInfusionStatusKey

where
ptptinfusionstatus.PtInfusionStatusKey IN (1,5)
)
,

PAT as
(
SELECT
STAT.PtID
,stat.name
,PtKey
,Person.LastName
,Person.FirstName
,stat.StartDate
,stat.EndDate
,STAT.PtInfusionStatusKey

FROM STAT

JOIN Person ON STAT.PersonKey = Person.personkey

)
,


ACCESS1 AS
(
SELECT d.Name
,d.PharmacyEventAndOutcomeTypeDetailKey
,T.PharmacyEventAndOutcomeTypeKey
FROM PharmacyEventAndOutcomeTypeDetail d WITH (NOLOCK)
left join PharmacyEventAndOutcomeType t WITH (NOLOCK) on t.PharmacyEventAndOutcomeTypeKey = d.PharmacyEventAndOutcomeTypeKey

)
,

ACCESS2 AS
(
SELECT PAT.ptkey, PAT.ptid, PAT.LastName, PAT.FirstName, PAT.StartDate, PAT.EndDate, PAT.PtInfusionStatusKey,
ISNULL(devicetype.Name, '') [Access Device_Type],
ppad.InsertionDate [Access Device_Insertion Date],
ppad.RemovalDate [Access Device_Removal Date],

FROM
PAT WITH (NOLOCK)
join PharmacyPtAccessDevice ppad WITH(NOLOCK) ON ppad.PtKey = PAT.PtKey
left join ACCESS1 devicetype WITH (NOLOCK) ON devicetype.PharmacyEventAndOutcomeTypeDetailKey = ppad.AccessDeviceTypeKey and devicetype.PharmacyEventAndOutcomeTypeKey = 4

)


--***MAIN QUERY***

SELECT
ACCESS2.StartDate as 'SOC Date'
,ACCESS2.[PtID] as 'Patient ID'
,ACCESS2.[LastName] + ', ' + ACCESS2.FirstName AS 'Patient'
,ACCESS2.StartDate
,ACCESS2.EndDate
,ACCESS2.[Access Device_Type] as 'Type of Line'
,ACCESS2.[Access Device_Insertion Date] as 'Insertion Date'
,ACCESS2.[Access Device_Removal Date] as 'Removal Date'
,ACCESS2.PtInfusionStatusKey
,DATEDIFF(d,
CASE WHEN [Access Device_Insertion Date] >= @start_date AND [Access Device_Insertion Date] >=ACCESS2.StartDate THEN ACCESS2.[Access Device_Insertion Date]
WHEN ACCESS2.StartDate >= ACCESS2.[Access Device_Insertion Date] AND ACCESS2.StartDate >= @start_date THEN ACCESS2.StartDate
ELSE @start_date END,
CASE WHEN @end_date <= ISNULL(ACCESS2.EndDate, @end_date) AND @end_date <= ISNULL(ACCESS2.[Access Device_Removal Date], @end_date) THEN @end_date
WHEN ACCESS2.EndDate IS NOT NULL AND ACCESS2.EndDate < @end_date AND ACCESS2.EndDate <= ISNULL(ACCESS2.[Access Device_Removal Date], ACCESS2.EndDate) THEN ACCESS2.EndDate
ELSE ACCESS2.[Access Device_Removal Date] END) + 1 AS '# of Cath Days'


FROM ACCESS2

WHERE
ACCESS2.StartDate <= @end_date
AND (ACCESS2.EndDate >= @start_date OR ACCESS2.EndDate IS NULL)
AND ACCESS2.[Access Device_Insertion Date] <= @end_date
AND (ACCESS2.[Access Device_Removal Date] >= @start_date OR ACCESS2.[Access Device_Removal Date] IS NULL)

 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top