我有一個events
表,其中有兩列eventkey
(唯一主鍵)和createtime
,它將事件的創建時間存儲爲NUMBER
列中1970年1月1日以來的毫秒數。在Oracle中創建直方圖/頻率分佈的最佳方法?
我想創建一個「直方圖」或頻率分佈,顯示在過去一週的每個小時內創建了多少個事件。
這是使用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
這個效果很好,謝謝。不知道爲什麼我沒有想到簡單地截斷日期,我想我很想搞清楚如何解析和投射這種奇怪的「日期」格式 – 2011-06-01 14:26:37
有沒有辦法維護create_times的行零計數? – 2014-10-29 15:59:03