としてはin a previous answer説明し、あなたの日付値の時刻部分を操作するためSSSSS書式モデルを使用することができます。ここでその方法を適用すると、あなたはその調整値によってクエリおよびグループすることができます:平均値を取得するには
SELECT
TO_CHAR(TO_DATE(FLOOR(TO_NUMBER(TO_CHAR(sess_start_date, 'SSSSS'))/900)*900,
'SSSSS'),'HH24:MI') time_start,
COUNT (sess_id) how_many
FROM
t.sessions,
t.users
WHERE
t.users.user_id = t.sessions.sess_user_id
AND user_type !='X'
AND sess_start_date>=TRUNC(ADD_MONTHS(SYSDATE,-12))
GROUP BY
TO_DATE(FLOOR(TO_NUMBER(TO_CHAR(sess_start_date, 'SSSSS'))/900)*900, 'SSSSS');
:
SELECT
TO_CHAR(TRUNC(sess_start_date)
+ FLOOR(TO_NUMBER(TO_CHAR(sess_start_date, 'SSSSS'))/900)/96,
'YYYY-MM-DD HH24:MI:SS') time_start,
COUNT (sess_id) how_many
FROM
t.sessions,
t.users
WHERE
t.users.user_id = t.sessions.sess_user_id
AND user_type !='X'
AND sess_start_date>=TRUNC(ADD_MONTHS(SYSDATE,-12))
GROUP BY
TRUNC(sess_start_date) + FLOOR(TO_NUMBER(TO_CHAR(sess_start_date, 'SSSSS'))/900)/96;
あなたが代わりに行うことができます日付を参照することなく期間をしたい場合あなたはインライン・ビューで、それらを組み合わせることができ、すべての日のために、同期間全体でカウント:
SELECT
TO_CHAR(period_start, 'HH24:MI') as period_start,
AVG (how_many) avg_how_many
FROM (
SELECT
TO_DATE(FLOOR(TO_NUMBER(TO_CHAR(sess_start_date, 'SSSSS'))/900)*900,
'SSSSS') period_start,
TO_CHAR(TRUNC(sess_start_date)
+ FLOOR(TO_NUMBER(TO_CHAR(sess_start_date, 'SSSSS'))/900)/96,
'YYYY-MM-DD HH24:MI:SS') time_start,
COUNT (sess_id) how_many
FROM
t.sessions,
t.users
WHERE
t.users.user_id = t.sessions.sess_user_id
AND user_type !='X'
AND sess_start_date>=TRUNC(ADD_MONTHS(SYSDATE,-12))
GROUP BY
TO_DATE(FLOOR(TO_NUMBER(TO_CHAR(sess_start_date, 'SSSSS'))/900)*900, 'SSSSS'),
TRUNC(sess_start_date) + FLOOR(TO_NUMBER(TO_CHAR(sess_start_date, 'SSSSS'))/900)/96
)
GROUP BY
period_start
ORDER BY
period_start;
[可能な複製?](http://stackoverflow.com/q/30920975/266304)。または[this](http://stackoverflow.com/q/21238990/266304)、状況はより複雑です。 –