Domanda

Ho una grande-ish tabella Oracle contenente righe che rappresentano le unità di lavoro, con colonne per ora di inizio e di fine, oltre ad altri meta-dati.

Ho bisogno di generare grafici di utilizzo da questi dati, dato alcuni criteri di filtro arbitrari e un periodo di tempo di riferimento. Per esempio, mi mostra un grafico di tutti i posti di lavoro di Alice per il periodo di 24 ore a partire Martedì scorso alle 7:00. Ogni riga DB impilare verticalmente nel grafico.

ho potuto fare questo in un linguaggio di alto livello interrogando tutte le righe potenzialmente rilevanti, di time-slicing secchi ciascuno in 1 minuto, e graficamente il risultato. Ma c'è un modo efficace per farlo time slicing in SQL? O c'è una tecnologia Oracle esistente che fa questo?

Grazie!

È stato utile?

Soluzione

In termini di ottenere i dati fuori, si può usare 'gruppo da' e ' troncare ' per tagliare i dati in intervalli di 1 minuto. ad esempio:

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') 

Questo vi darà risultati come di seguito (non assumendo sono 20 righe per Alice tra le 8.00 e 8.01 e 40 righe tra 8.01 e 8.02):

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

Altri suggerimenti

La cosa migliore è quella di avere un tavolo (una temporanea generata al volo sarebbe bene se il tempo-fetta è dinamica) e poi unirsi contro quella.

Questo dovrebbe fare abbastanza bene. Sarà ripartizione al minuto (1/1440 di una giornata).

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

Sono sicuro che ci sia un modo più veloce per fare questo, ma questo è il meglio che posso venire con. Spero che questo aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top