2016-03-18 7 views
1

列の値のほとんどの連続発生のグループを検索します。それは大きなテーブル..ですので、上のオラクル - 私はこのようなTEST_TABLEと呼ばれるテーブルの構造を有する

Timestamp Value 
08:45:45 C 
08:45:59 E 
08:46:52 V 
08:46:59 C 
08:47:09 C 
08:48:00 C 
08:48:30 C 
08:48:55 C 
08:49:45 E 
08:50:45 E 
08:41:45 V 

とを

をし、約3000行あります。私はテーブルのセクション(開始と終了のタイムスタンプ)が "C"値の最も長い実行の発生を見つけたいと思っています。たとえば、上記の場合、8:46:59〜8:48:55になります。 大きなテーブルからその最長のデータを抽出するためのOracleクエリーはありますか?

おかげ

+0

ウィンドウの機能とランクをご覧ください。 –

答えて

3

あなたは配列を同定するために使用することができますrow_number()値の差を利用したトリックがあります:1行のみを取得するには

select value, count(*) as sequence_length, min(timestamp), max(timestamp) 
from (select t.*, 
      (row_number() over (order by timestamp) - 
       row_number() over (partition by value order by timestamp) 
      ) as seqnum 
     from t 
    ) t 
where value = 'C' 
group by seqnum, value 
order by max(timestamp) - min(timestamp) desc; 

は、Oracle 12cは+でfetch first 1 row onlyを使用することができます。以前のバージョンでは、次を使用できます。

select t.* 
from (<subquery> 
     order by . . . 
    ) t 
where rownum = 1; 
+1

ありがとうゴードン。それは完璧に働いた! – bhattedon

関連する問題