This query takes a long time to run and actually ends up causing another application that is accessing SQL at the same time to halt. I thought the "WITH (NOLOCK)" clause should have taken care of that problem but it hasn't. Can anyone offer any suggestions to improving this query?
Code:
IF DATEPART(hour, getdate()) BETWEEN 6 AND 17
BEGIN
SELECT DATEPART(hour, ProcessDate) AS 'Beg Hr',
DATEPART(hour, ProcessDate) + 1 AS 'End Hr',
COUNT(*) / 2 AS 'Number of Parts'
FROM dbo.[Scan Detail] WITH (NOLOCK)
WHERE ((DATEPART(hour, ProcessDate) BETWEEN 6 AND 9) AND (ProcessDate >= GETDATE() - 0.5)
AND (LEFT(ScanData, 3) = 'TDL'))
GROUP BY DATEPART(hour, ProcessDate), DATEPART(hour, ProcessDate) + 1
ORDER BY DATEPART(hour, ProcessDate)
END ELSE
BEGIN
SELECT DATEPART(hour, ProcessDate) AS 'Beg Hr',
DATEPART(hour, ProcessDate) + 1 AS 'End Hr',
COUNT(*) / 2 AS 'Number of Parts'
FROM dbo.[Scan Detail] WITH (NOLOCK)
WHERE ((DATEPART(hour, ProcessDate) BETWEEN 18 AND 21)
AND (ProcessDate >= GETDATE() - 0.5)
AND (LEFT(ScanData, 3) = 'TDL'))
GROUP BY DATEPART(hour, ProcessDate), DATEPART(hour, ProcessDate) + 1
ORDER BY DATEPART(hour, ProcessDate)
END