我有一个events
包含两列eventkey
(唯一、主键)和的表createtime
,它将事件的创建时间存储为自 1970 年 1 月 1 日以来的毫秒数NUMBER
。
我想创建一个“直方图”或频率分布,显示过去一周的每个小时内创建了多少事件。
width_bucket()
这是使用该函数在 Oracle 中编写此类查询的最佳方法吗?是否可以使用其他 Oracle 分析函数之一导出落入每个存储桶的行数,而不是使用width_bucket
来确定每行属于哪个存储桶编号并count(*)
对其进行处理?
-- 1305504000000 = 5/16/2011 12:00am GMT
-- 1306108800000 = 5/23/2011 12:00am GMT
select
timestamp '1970-01-01 00:00:00' + numtodsinterval((1305504000000/1000 + (bucket * 60 * 60)), 'second') period_start,
numevents
from (
select bucket, count(*) as events from (
select eventkey, createtime,
width_bucket(createtime, 1305504000000, 1306108800000, 24 * 7) bucket
from events
where createtime between 1305504000000 and 1306108800000
) group by bucket
)
order by period_start