Это выглядит немного хакерской, но это должно быть то, что вы ищете.Lpad просто для лучшего результата.
Редактировать: Забыл сгруппировать по фактическому утверждению, а не по sample_time .Теперь он должен группироваться с интервалами в 15 секунд.
select
to_char(sample_time, 'hh24:mi:') || lpad(trunc(to_number(to_char(sample_time, 'ss')) / 15) * 15, 2, '0') as SAMPLE_TIME,
nvl(wait_class, 'CPU') as wait_class,
count(*)
from gv$active_session_history
group by nvl(wait_class, 'CPU'), to_char(sample_time, 'hh24:mi:') || lpad(trunc(to_number(to_char(sample_time, 'ss')) / 15) * 15, 2, '0')