dfhusfhgsuo3, нагрузка зависит от условий запроса подсчёта.
А так, и во from, и в left Join можно вставить подзапросы. Главное чтобы там не миллионы строк были.
А логика, вы выбираете нужные временные периоды (во from подзапрос), далее к этому делаете left Join, в котором подзапросом считаете статистику и объединяет все по часам.
Если данные за час есть - они выберутся. Если нет - то будет null, который заменится на 0.
например, есть у тебя какой-нибудь сложный метод фабрики, строк так на 300, разделенный на 3 логичных фрагмента.
вот ты его оборачиваешь в public static, 3 фрагмента делаешь как private static и выдаешь результат.