問題タブ [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.
sql - Oracle の最大行と最小行に関連する値を取得する
Oracle 11g では、テーブルをクエリして、特定のグループの最大値と最小値を持つ行から情報を引き出すことができる必要があります。たとえば、EMP テーブルを使用して、各部門で最も給与が高い人の名前と最も給与が低い人の名前を見つけたいとします。
(給与が最高または最低のスタッフが 2 人以上いる場合は、常に最初のスタッフをアルファベット順に返します)。
以前の投稿では、最大値と最小値の両方ではなく、最大値のみの値を取得する方法について説明しました。
現時点では、上記のリンクに基づいて、次のクエリを適用するための厄介なソリューションがありますが、パフォーマンスは重要です。優れたソリューションには、分析関数と、場合によっては複数の行を単一の行に結合するためのピボットも必要になると予測しています。
どんな助けでも大歓迎です!リチャード
sql - SQL 分析関数 - パーティションに番号を割り当てる方法は?
オラクルを使用しています。
このサンプルのランダムなコンテンツを含むテーブルがあるとします。
columnA の各値に一意の番号を持ち、その値を持つ columnA の行内に番号を記録するビューが必要です。
上記のサンプル データに基づいて求められる結果:
で入手できrecord_number
ますrow_number() over (partition by columnA order by columnB asc)
。
group_number
実際には old のフレンドリなシーケンス エイリアスであるを取得するにはどうすればよいcolumnA
ですか?
ありがとうございました。
sql - PARTITION BY 句から ORDER BY 句を削除しますか?
以下の内部クエリの OVER 部分にある「ORDER BY lro_pid」句の影響を軽減する方法はありますか?
完全に別の変数で並べ替えたいので、パーティション内でこの結果を並べ替える必要はありません。lro_pid はインデックス付きの列ですが、現状ではリソースの無駄遣いのように見えます。(おそらく、順序付けを単一の行の範囲に制限する方法がありますか??パーティション内のソートに時間/エネルギーがまったく費やされないことを願っています)
sql - OracleでのGroupbyとPartitionby
Oracleウェアハウスからレコードをフェッチするためのクエリを作成しています。いくつかのテーブルで結合を使用する単純なSelectクエリであり、集計する列がほとんどありません。したがって、残りの列でGroupbyを使用することになります。
たとえば、10個の列を選択し、そのうち5個が集計列であるとします。したがって、他の5つの列でグループ化する必要があります。Groupbyを実行せず、派生させたい各集計列にover(paritition by)句を使用することで、同じことを実現することもできます。
倉庫と一般的にどちらが良いかわかりません。
sql-server - NULL 値を結果セット シリーズの最新の非 NULL 値に置き換える (SQL Server 2008 R2)
SQL Server 2008 R2 の場合
このような結果セットがあります ([価格] は数値であり、以下の NULL は NULL 値を表し、結果セットは product_id とタイムスタンプで並べ替えられていることに注意してください)
これを、直前の行から null 以外の値を (本質的に) コピーする結果セットに変換して、次のような結果セットを生成したいと考えています。
これを可能にする集計/ウィンドウ関数が見つかりません(これもSQL Server 2008 R2にのみ必要です)。
私はこれを行う分析集計関数を見つけたいと思っていました...
しかし、ウィンドウで「累積的な最新のnull以外の値」を実行する方法が見つからないようです(ウィンドウをパーティション全体ではなく、前の行にバインドするため)
テーブル値のユーザー定義関数を作成する以外に、これを実現するビルトインはありますか?
アップデート:
どうやら、この機能は「デナリ」CTP で利用できますが、SQL Server 2008 R2 では利用できません。
LAST_VALUE http://msdn.microsoft.com/en-us/library/hh231517%28v=SQL.110%29.aspx
SQL Server 2008 で利用できると思っていました。Oracle で利用できます (少なくとも 10gR2 以降)。ローカル変数を使用して、MySQL 5.1 でも同様のことができます。
http://download.oracle.com/docs/cd/E14072_01/server.112/e10592/functions083.htm
java - 構文解析とパーサー
私はそのようなものを解析したい:
path.to.variable
「path」と「to」は「Instance」という名前のオブジェクトであり、変数はdoubleを参照します。
私は次の文法を持っています:
この文法では:
- INSTANCE_SEPARATORは「。」です。char。
- SHORTCUTは、「path」、「to」、「variable」などの文字のみで名前が付けられています。
- exprは、名前(ここでは「変数」)をとる関数getDoubleの呼び出しによって取得されたdouble値を返す必要があります。この関数は、現在選択されているインスタンスを使用します。インスタンスには、doubleまたは他のインスタンスを含むハッシュテーブルが含まれています。
- pushInstanceは、現在のインスタンスを設定する関数です
たとえば、次のようになります。
- 次のハッシュテーブルを含むインスタンス「パス」:「to」=>インスタンス「to」へのリンク
- 次のハッシュテーブルを含むインスタンス"to": "variable" => 10
- パス「path.to.variable」は10を返す必要があります。
文法がnull値を要求するため、これは実行されません。これは、パーサーがこれを行うという事実によるものです:
)。
する代わりに
なんで ?優先順位の問題はありますか?
最後に、instancePathルールを削除すると、すべてが実行されます。
例を簡略化したため、この余分なルールを削除することはできませんが、実際にはかなり複雑です。
この余分なルールを削除すると問題が解決する理由がわかりません...
sql - Oracle SQLを使用して現在までの変数の中央値を計算するにはどうすればよいですか?
OracleSQLで請求書データを処理しています。指定された請求日までのアカウントの請求額の中央値を与える変数「現在までのアカウント請求額の中央値」を作成したいと思います。
sql - SQL でのトランザクション アクティビティの実行中の合計
私は取引テーブルを扱っています。過去 5 分間と 30 分間、1 時間、2 時間、3 時間、4 時間、1 日間、5 日間、10 日間に同じ顧客によって実行されたトランザクションの数を決定するために、いくつかの変数を生成したいと考えています。トランザクション テーブルにそのような列を生成する効率的な方法は何ですか? -- 解決策は、各トランザクション時間までの累計です。Oracle やその他の SQL バリアントを自由に使用できます。
oracle - Oracle 分析: 計算で LAG 値を使用しますか?
タスクがいつ完了したかを記録するテーブルがあります。タスクはワークフローに属していますが、この例では LAG を機能させようとしています。
各タスクにかかる時間に関する情報を見つけたいと思います。
私はもう試した:
しかし、これはエラーになります。現在の行と前の行の差を計算する方法はありますか?
sql - Oracle SQLを使用して線形補間を実行するにはどうすればよいですか?
数値分析、特に関心のある 3 つの列 (タイムスタンプ、デバイス ID、値) を持つテーブルでの線形補間に Oracle 11g (開発では 11.1、運用では 11.2) を使用しようとしています。
値の列には、タイムスタンプで指定された時点で取得されたデバイス (id deviceid を持つ) からのデータが保持されます。たとえば、これは偽のデータですが、アイデアは次のようになります。
デバイス 001 からのタイムスタンプはデバイス 002 のタイムスタンプと一致しませんが、デバイス 001 と 002 の両方からの値を 1 つの行に、1 つのタイムスタンプで、デバイス 001 のタイムスタンプと一致させる必要があります。このようなもの:
デバイス 002 の値は、デバイス 001 の各タイムスタンプの両側にある 2 つの最も近いタイムスタンプで収集されたデバイス 002 の値に基づいて線形補間されました。 01:00:00.000 であり、値を外挿したくありません。
私が理解していることから、percentile_cont を使用してこれを行うことができますが、オンラインで見た例がわかりません。たとえば、percentile_cont で使用されるパーセンタイルはどこから来るのでしょうか?
よろしくお願いします。