Frage

Ich habe eine große ish Oracle Tabellenzeilen, die Einheiten von Arbeit darstellen, mit Spalten für Startzeit und Endzeit zusätzlich zu anderen Meta-Daten.

Ich muss Nutzungsdiagramme aus diesen Daten, da einige beliebigen Filterkriterien und eine Berichtszeitperiode erzeugen. Z. B. zeigen Sie mir ein Diagramm aller Alices Arbeitsplätze für den 24-Stunden-Zeitraum im vergangenen Dienstag um 07.00 Uhr beginnen. Jede Zeile wird DB Stapel vertikal in der grafischen Darstellung.

ich in einer Hochsprache tun könnte dies alle potenziell relevanten Zeilen durch Abfragen, die Zeit jeder in 1-Minuten-Eimer schneiden, und die grafische Darstellung des Ergebnisses. Aber gibt es eine effiziente Möglichkeit, um dieses Time-Slicing in SQL zu tun? Oder gibt es eine bestehende Oracle-Technologie, die dies tut?

Danke!

War es hilfreich?

Lösung

In Bezug auf die Daten bekommen, können Sie ‚Gruppe‘ verwenden und ‚ trunkieren ‘die Daten in Intervallen von 1 minute zu schneiden. zB:

SELECT user_name, truncate(event_time, 'YYYYMMDD HH24MI'), count(*)
FROM job_table
WHERE event_time > TO_DATE( some start date time)
AND user_name IN ( list of users to query )
GROUP BY user_name, truncate(event_time, 'YYYYMMDD HH24MI') 

Dies wird Ihnen Ergebnisse wie unter (vorausgesetzt, es sind 20 Reihen für alice zwischen 8,00 und 8,01 und 40 Reihen zwischen 8.01 und 8.02):

Alice  2008-12-16 08:00   20
Alice  2008-12-16 08:01   40

Andere Tipps

Am besten ist es, einen Tisch haben (ein temporären on the fly erzeugt wäre schön, wenn die Zeitscheibe dynamisch ist) und dann kommen dagegen.

Das sollte es tun ziemlich gut. Es wird Aufschlüsselung auf die Minute (1/1440 eines Tages).

SELECT 
  to_char(Times.time,'hh24:mi'),
  count(*)   
FROM   
  (SELECT
     time
   FROM  
     dual
   WHERE 
     1=2 
   MODEL 
     dimension by ( 0 as key )
     measures     ( sysdate -1 as time )
     rules upsert ( time[ for key from 0 to 1 increment (1/1440) ] = sysdate-1 + cv(key)) ) Times,
  job_table
WHERE 
  begintime <= Times.time 
AND 
  endtime > Times.time 
AND
  user_name = 'Alice'
GROUP BY 
  Times.time 
ORDER BY
  Times.time

Ich bin sicher, dass es ein schnellerer Weg, dies zu tun, aber das ist das Beste, was ich mit oben kommen kann. Hoffe, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top