質問

私は他のメタデータに加えて、開始時刻と終了時刻の列と作業単位を表す行を含む大きな風Oracleテーブルを有している。

私はいくつかの任意のフィルタリング基準と報告期間を指定して、このデータから利用グラフを生成する必要があります。例えば、私は午前7:00前火曜日始まる24時間の期間のためのアリスの仕事のすべてのグラフを示しています。各DBの行は、グラフに垂直にスタックされます。

私は時間が1分バケットにそれぞれをスライスし、その結果をグラフ、全ての潜在的に関連する行を照会することによって、高レベルの言語でこれを行うことができました。しかし、SQLでこのタイムスライスを行うための効率的な方法はありますか?それともこれを行い、既存のOracle技術があるのでしょうか?

ありがとうございます。

役に立ちましたか?

解決

からデータを取得の面では、」「でグループ」を使用することができ1分間隔にデータをスライスする「を切り捨てます。例えばます:

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

これはあなたに以下のような結果が得られます(8.00と8.01と8.01と8.02の間に40行の間アリスのための20行がされていると仮定した場合)

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

他のヒント

あなたの最善の策は、テーブルを持っている(タイムスライスが動的である場合、その場で生成された一時的なものは大丈夫だろう)と、その反対に参加することです。

これはかなりよくそれを行う必要があります。それは意志分(一日の1/1440)に内訳ます。

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

私はこれを行うにはより高速な方法があると確信しているが、これは、私が思い付くことができる最高です。 この情報がお役に立てば幸いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top