Usando la vista en línea:
SELECT DATEPART(hh, x.visitdate),
AVG(x.num)
FROM (SELECT t.visitdate,
COUNT(*) 'num'
FROM CUSTOMERLOG t
WHERE t.visitdate BETWEEN 'Jan 1 2009' AND 'Aug 1 2009'
GROUP BY t.visitdate) x
GROUP BY DATEPART(hh, x.visitdate)
Usando el equivalente de CTE (SQL Server 2005+):
WITH visits AS (
SELECT t.visitdate,
COUNT(*) 'num'
FROM CUSTOMERLOG t
WHERE t.visitdate BETWEEN 'Jan 1 2009' AND 'Aug 1 2009'
GROUP BY t.visitdate)
SELECT DATEPART(hh, x.visitdate),
AVG(x.num)
FROM visits x
GROUP BY DATEPART(hh, x.visitdate)