Preliminarily, here's the Query I would start with:
;WITH
cteMeasure As
(
SELECT m.[Patient_ID], m.[MEASUREMENT_DATETIME]
FROM [PROJECT].[dbo].[MEASURE] m
WHERE m.[TYPE] IN('SYSTOLIC', 'SYSLIE', 'SYSSTAND')
)
, lateTime As
(
SELECT p.[Patient_ID], max(m.[MEASUREMENT_DATETIME]) AS lateMeasure
FROM [PROJECT].[dbo].[PATIENT] p
INNER JOIN [PROJECT].[dbo].[CONSULTATIONS] c ON p.[Patient_ID] = c.[Patient_ID]
INNER JOIN cteMeasure m ON p.[Patient_ID] = m.[Patient_ID]
WHERE [VISIT_DATE] >= '2010-02-07'
AND m.[g_Site] = 'NSW_xxx_MC'
GROUP BY p.[Patient_ID]
HAVING COUNT(DISTINCT [VISIT_DATE]) >= 3
)
SELECT COUNT(UQ102.[Patient_ID])
FROM
(
SELECT me.[Patient_ID]
FROM cteMeasure me
JOIN lateTime
ON me.[Patient_ID] = lateTime.[Patient_ID]
AND me.[MEASUREMENT_DATETIME] = lateTime.[lateMeasure]
WHERE me.[MEASUREMENT] <> '' AND ISNUMERIC(me.[MEASUREMENT]) = 1
AND ( ( me.[MEASUREMENT] <> '0'
AND SUBSTRING(me.[MEASUREMENT], 1, 1) <> '0'
AND SUBSTRING(me.[MEASUREMENT], 1, 3) >= '100' AND SUBSTRING(me.[MEASUREMENT], 1, 3) < '250'
AND SUBSTRING(me.[MEASUREMENT], 2, 1) <> '.'
)
OR ( me.[MEASUREMENT] BETWEEN '0' AND '999'
AND SUBSTRING(me.[MEASUREMENT], 1, 2) > '70'
AND SUBSTRING(me.[MEASUREMENT], 2, 1) <> '.'
)
)
GROUP BY me.[Patient_ID]
) UQ102
It should be logically the same, so it may just produce the same query plan, but it has been simplified/reduced syntactically, so it's worht trying and seeing.
[font="Times New Roman"]-- RBarryYoung[/font], [font="Times New Roman"] (302)375-0451[/font] blog: MovingSQL.com, Twitter: @RBarryYoung[font="Arial Black"]
Proactive Performance Solutions, Inc. [/font][font="Verdana"] "Performance is our middle name."[/font]