Подход с использованием таблицы календаря может быть хорошим выбором здесь:
WITH cte AS (
SELECT '2017-12-08 00:00:00' AS dt UNION ALL
SELECT '2017-12-08 01:00:00' UNION ALL
SELECT '2017-12-08 02:00:00' UNION ALL
...
SELECT '2017-12-08 22:00:00' UNION ALL
SELECT '2017-12-08 23:00:00'
)
SELECT
CONVERT(date, t1.dt) AS Date,
COUNT(DISTINCT t1.dt) AS HoursSpent
FROM cte t1
INNER JOIN yourTable t2
ON t2.DateTime >= t1.dt AND t2.DateTime < DATEADD(HOUR, 1, t1.dt)
GROUP BY
CONVERT(date, t1.dt);
Единственная сложная часть этого ответа - создание таблицы почасового календаря. См. Здесь , чтобы узнать, как это сделать в SQL Server.