トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-33 15分単位の集計
SQLパズル
結果テーブル
Time 数量
---------------- ----
2006/01/21 06:15 15
2006/01/21 06:16 14
2006/01/21 06:17 13
2006/01/21 06:18 12
2006/01/21 06:19 11
2006/01/21 06:20 10
2006/01/21 06:21 9
2006/01/21 06:22 8
2006/01/21 06:23 7
2006/01/21 06:24 6
2006/01/21 06:25 5
2006/01/21 06:26 4
2006/01/21 06:27 3
2006/01/21 06:28 2
2006/01/21 06:29 1
15分単位(0分から14分、15分から29分、30分から44分、45分から59分)
で数量の合計と件数と平均と最大と最小を出力する。
出力結果
期間 合計 件数 平均 最大 最小
------------------------------------ ---- ---- ---- ---- ----
2006/01/21 06:15から2006/01/21 06:29 120 15 8 15 1
データ作成スクリプト
create table 結果(
Time date,
数量 number(3));
declare
now date := trunc(sysdate,'MI');
begin
for i in -100..100 Loop
insert into 結果 values(now+i/24/60,abs(i));
end Loop;
commit;
end;
/
SQL
col 期間 for a36
col 合計 for 9999
col 件数 for 999
col 平均 for 999
col 最大 for 999
col 最小 for 999
select 期間,sum(数量) as 合計,count(*) as 件数,
avg(数量) as 平均,max(数量) as 最大,min(数量) as 最小
from
(select to_char(Time,'YYYY/MM/DD HH24:')
|| LTrim(to_char(trunc(to_char(Time,'MI')/15)*15,'09')) || 'から'
|| to_char(Time,'YYYY/MM/DD HH24:')
|| LTrim(to_char(trunc(to_char(Time,'MI')/15)*15+15-1,'09')) as 期間,
数量 from 結果)
group by 期間
order by 期間;
解説
trunc関数で、分を15で割った商を取得して、
15分単位で集計してます。