0

各グループ (ID) のシーケンシャル イベント (識別子 NUM) の重複期間 (FROM および TO 変数で定義) を「先読みバッファー」とマージする必要があります。つまり、次の期間がバッファー ゾーン内で開始する場合、それらは合併しました。

例えば; 次の例では、2 番目のイベント (NUM = 2) が時間 13 で開始され、これはバッファー ゾーン (10 + 5 = 15) 内にあります。

私が見つけた他の同様の問題と比較して、ここで注意が必要なのは、バッファ期間は各イベントの固定値ですが、バッファ期間が長いイベント (逆方向のみ) とマージされると、これが変わる可能性があることです。

例えば; イベント 3 も、イベント 1 および 2 と同じ期間にマージされます。これは、これらのイベントのバッファー期間がより長いためです。次のバッファ ゾーンは、(25 + 3 = 28) ではなく (25 + 5 = 30) にする必要があります。つまり、次のイベント 4 もこれらの期間に含める必要があります。

もう一度、イベント 4 のバッファー期間も 5 に変更されます。ただし、40 > 31+5 であるため、最後のイベントは別の観測です。

CREATE TABLE MY_TABLE(ID INTEGER, NUM INTEGER, FROM INTEGER, TO INTEGER, LOOKAHEAD INTEGER);
INSERT INTO MY_TABLE VALUES (1, 1, 1,  10, 5);
INSERT INTO MY_TABLE VALUES (1, 2, 13, 20, 5);
INSERT INTO MY_TABLE VALUES (1, 3, 21, 25, 3);
INSERT INTO MY_TABLE VALUES (1, 4, 29, 31, 3);
INSERT INTO MY_TABLE VALUES (1, 5, 40, 50, 3);

最終的に、必要な結果は、2 つの「分離」期間を持つ 2 つの観測値です。

(ID = 1, FROM = 1,  TO = 31)
(ID = 5, FROM = 40, TO = 50)

当然のことながら、最初は、LOOKAHEAD2 の以前の値と LOOKAHEAD の現在の値の最大値である新しい変数 LOOKAHEAD2 を作成することで、この「LOOKHEAD」変数を作成できると考えていました。 FROM(このレコード) < (TO + LOOKAHEAD)(前のレコード) OLAP 関数を使用します。ただし、これはそれ自体への参照であるため、実際には機能しません...

代わりに、最初の event から開始する再帰クエリを使用してみました。次に、条件付き(NUM = 1)の次のイベントでテーブルを再帰的に結合し、それに応じて LOOKAHEAD 変数を更新しました。(root.NUM+1 = next.NUM)(root.TO + root.LOOKAHEAD > next.FROM)

しかし、これまで再帰クエリを使用したことがなく、LOOKAHEAD 値の更新された値に参加させることができません。

再帰クエリなどでこれを解決する方法を知っている人はいますか?

4

1 に答える 1