Я думаю, вы также хотите, чтобы оно было сгруппировано по дате, а не только по часам, верно?
select
convert(VARCHAR(10), date, 111) as aDate,
datepart(HH, date) anHour,
avg(value) anAverage
from t
group by convert(VARCHAR(10), date, 111), datepart(HH, date)
Или это:
; with aTable as (
select
convert(VARCHAR(10), date, 111) as aDate,
datepart(HH, date) anHour,
value
from t)
select aDate, anHour, avg(value) from aTable
group by aDate, anHour