Optimale Weg, um erstellen Sie ein Histogramm mit der Häufigkeitsverteilung in Oracle?

Ich habe eine events Tabelle mit zwei Spalten eventkey (unique, primary-key) und createtime speichert die Erstellungszeit der Veranstaltung, die als Anzahl der Millisekunden seit Jan 1 1970 in einem NUMBER Spalte.

Ich würde gern ein "Histogramm" oder Häufigkeitsverteilung, die mir zeigt, wie viele Ereignisse wurden in jeder Stunde in der letzten Woche.

Ist dies die beste Art und Weise zu schreiben, wie eine Abfrage in Oracle, mit der width_bucket() Funktion? Ist es möglich, daraus die Anzahl der Zeilen, die fallen in jeden Eimer mit einem der anderen Oracle analytische Funktionen, anstatt mit width_bucket zu bestimmen, was die bucket-Zahl jeder Reihe gehört und dabei ein count(*) damit?

-- 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
InformationsquelleAutor matt b | 2011-06-01
Schreibe einen Kommentar