Я бы сделал справочник, с необходимыми интервалами времени (допустим сутки, разбитые по 1 часу), назовем calendar, и сделал JOIN, с вот таким ограничением:
calendar.MyHour between "время начала сессии" and "время конца сессии".
Тем самым, каждую строку исходной таблицы мы множим на количество временных интервалов, которые она охватывает.
Сразу вижу еще 1 место для проработки, если временной интервал охватывает несколько дней, то нужен второй справочник, с днями, у меня такой называется DAYS, где список дат (в прошлое и будущее) с кучей полезной информации по календарю, работаем с ним аналогичным образом.
Если что-то непонятно объяснил, могу подробнее...