問題タブ [analytic-functions]

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 投票する
3 に答える
3789 参照

sql - Oracleで以前に計算された値の値を参照する

SQLクエリで前の行から計算された値を参照するにはどうすればよいですか? 私の場合、各行は、前の行と同じ値を何らかの形で操作するイベントです。

生データは次のようになります。

各 Eventtype=OUT が、Remaincharge という列の前の行の totalcharge の半分であるとします。

すでに LAG 分析関数を試しましたが、前の行から計算値を取得できません。次のようなことを試しました:

LAG(remaincharge, 1, totalcharge) OVER (PARTITION BY ...) as remaincharge

しかし、remaingcharge が見つからなかったため、これは機能しませんでした。

これを達成する方法はありますか?累積合計を取得できる分析関数が必要ですが、代わりに前の値にアクセスできる関数が必要です。

前もって感謝します!

問題の説明を更新する

私の例の問題は一般的なものだったと思いますが、ここに問題のより良い説明があります:

合計料金の残りは、outqty/(前の残りの数量) の比率によって決まります。

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

sql - 分析関数を使用した次のアクション

コホート分析が必要なため、各顧客の次のアクション (サブスクリプション解除、アップグレード、ダウングレード...) を取得しようとしています。

次のデータを含む月次スナップショットがあります。

ご覧のとおり、アクションは実行された月にのみわかります。2012 年 1 月 1 日の時点では、顧客が 2012 年 4 月 1 日にダウングレードしたかどうかはまだわからないため、彼の使用行動を相対的に分析することはできません。彼の格下げ月に。退会についても同様です。

必要なデータセットは次のとおりです。

last_value 分析関数を使用してサブスクリプション解除日を簡単に取得できましたが、ダウングレード日を取得する方法が見つかりませんでした。

ここに私のSQLクエリがあります:

「downgrade_date」のように「次の」アクションの日付を取得する方法。

オラクルを使用しています。

0 投票する
2 に答える
5416 参照

sql - パーセンタイルへの別のアプローチ?

基本的に、ジョブ バッチのリスト、各バッチに含まれるジョブの数、および各ジョブ バッチの期間で構成されるデータセットがあります。サンプル データセットを次に示します。

ここで、期間フィールドのパーセンタイルを計算したいと思います。通常、これは次のような方法で行われます。

(結果は 9 になります)

ここでの問題は、バッチに基づいてパーセンタイルを取得したくないことです。個々のジョブに基づいてパーセンタイルを取得したいのです。これは、job_count の現在の合計を生成することで、非常に簡単に手で把握できます。

579 個のジョブがあるため、75 パーセンタイルはジョブ 434 になります。上記の結果セットを見ると、これは 7 の期間に対応しており、標準関数の動作とは異なります。

基本的に、バッチ内の各ジョブを個別の観察と見なし、バッチではなく、それらに基づいてパーセンタイルを決定したいと考えています。

これを達成するための比較的簡単な方法はありますか?

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

sql - Vertica - カレンダー テーブルの作成

Vertica に存在しない日付を入力することに関連する問題があります。人々がカレンダーテーブルを作成することを提案しているソリューションをオンラインで見ました。これは、stackoverflow による MYSQLの問題の 1 つです。

Vertica でサポートされている SQL のみを使用し、手順を使用せずに、別のテーブルから min() および max() の利用可能な日付を使用してカレンダー テーブルを作成する方法はありますか? これまでに遭遇したソリューションのほとんどは T-SQL に基づいており、日付はプロシージャを使用して生成されます。残念ながら、Vertica には PL/SQL や T-SQL の機能はあまりありません。しかし、私の問題を解決できると思われる分析機能がいくつかあります。

0 投票する
3 に答える
3992 参照

sql - 累積値と月間合計を 1 行で取得する SQL を作成するにはどうすればよいですか?

たとえば、次のデータがあります。

次のような結果を得たいです。

このテーブルでは、Bob の総売上は最初から 41 です。そして今月は 7 月で、彼のこの月全体の売り上げは 24 です。アンについても同じことが言えます。

この結果を取得するための SQL をどのように記述すればよいでしょうか?

0 投票する
3 に答える
2568 参照

sql - Oracle 分析関数 - ウィンドウ句のリセット

次のデータセットがあります。

私の目標は、部門が変わるたびにリセットされるランク列を作成することです。「partition by」句に使用できる最も近い列は dept ですが、それでは望ましい結果が得られません。

目的の出力は次のとおりです。最後の rnk=1 は、Jan-04 レコードが変更後の最初のレコードであるためです。

ポインタはありますか?

0 投票する
4 に答える
5193 参照

sql - 単一の日付列から開始日/終了日を取得する方法 - Oracle

ここでいくつかの素晴らしい答えを見てきましたが、修正が必要です。テーブルや ETL はまだ作成したくないので、ユーザーがアクセスして最初にテストできる単純なデータベース ビューを作成したいと考えていました。

テーブルには、item#、item_ticket_color#、maint_date、およびその他の列があります tick_col は時々更新されますが、テーブル内の他の列も更新されます。他の列が更新または変更された場合、 tick_col が繰り返されます。以下の期待される結果を得るには、このデータをフィルタリングする必要があり、これを行う方法を理解するために助けが必要です。可能であれば、ストレート SQL を探しています

チケットの色が変更された各シナリオの開始日と終了日が示されている以下を参照してください。

ここで SQLFiddle

これが Jasti の貢献に基づく新しいコードです。いくつかの追加の変更を加えましたが、これはまさに私が望んでいたものです。