次のように定義されたOracle 10のテーブルがあります。
LOCATION HOUR STATUS
--------------------------------------
10 12/10/09 5:00PM 1
10 12/10/09 6:00PM 1
10 12/10/09 7:00PM 2
10 12/10/09 8:00PM 1
10 12/10/09 9:00PM 3
10 12/10/09 10:00PM 3
10 12/10/09 11:00PM 3
この表は、さまざまな場所と少数のステータス値について続きます。各行は、1 つの場所の 1 時間をカバーしています。データは、その 1 時間の間に特定の場所から収集され、チャンクで処理されます。データが利用できる場合とそうでない場合があり、その情報はステータスにエンコードされます。上記の表を次のように変換できるように、特定のステータスの実行を見つけようとしています。
LOCATION STATUS START END
-----------------------------------------------------------
10 1 12/10/09 5:00PM 12/10/09 7:00PM
10 2 12/10/09 7:00PM 12/10/09 8:00PM
10 1 12/10/09 8:00PM 12/10/09 9:00PM
10 3 12/10/09 9:00PM 12/11/09 12:00AM
基本的に、テーブルを特定のステータスの各ストレッチを定義する行に凝縮します。リード/ラグを使用して開始点と終了点を把握するなど、さまざまなトリックを試しましたが、すべて失敗に終わりました。これまでのところ機能する唯一のトリックは、プログラムで値を 1 つずつ処理することですが、これは時間がかかります。Oracleで直接行うためのアイデアはありますか? ありがとう!