問題タブ [teradata-sql-assistant]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
230 参照

teradata - 再帰クエリを使用して期間を集計する

各グループ (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 であるため、最後のイベントは別の観測です。

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

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

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

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

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