問題タブ [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 MIN - ORDER BY の奇妙な動作?
この特定のケースは、プログラマーがタンク車への 2 つの出荷の場合、ライン #1 が最初に積み込まれると仮定した例から抽出されました。これを修正して、ロードを任意の順序で実行できるようにしMIN() OVER (PARTITION BY)
ましORDER BY
たORDER BY
。に追加されましたPARTITION BY
。
SQL Server の例 (該当しないコードはコメント化されています):
質問: オラクルは何をしていて、なぜそれは正しいのでしょうか?
oracle - Oracleを使用して任意の日付範囲の行数を検索する
私が答える必要のある質問は、「60分間にこれまでに受け取ったページリクエストの最大数はいくつですか?」です。
私はこれに似たテーブルを持っています:
60分のタイムスライスの最大行数を探しています。
分析関数が私をそこに導くかもしれないと思ったが、今のところ私は空白を描いている。
私は正しい方向へのポインターが大好きです。
sql - SQL Server ROW_NUMBER()が1から開始されないシナリオはどれですか?
クエリで使用ROW_NUMBER()
しています。ほとんどすべてのシナリオで正しい結果が返されます。ただし、1人のユーザーの場合、動作は大きく異なります。
このクエリは、ページサイズが50に設定されている場合、そのユーザーに対して正常に機能します。ただし、ページサイズが100に設定されている場合、すべての行が返されるわけではありません。10行だけを返しています。条件を満たす結果は100以上ありますが。正しく機能していない以下のクエリを見つけてください。
理由を確認しようとすると、2番目のクエリが100より大きいRN値を返すことがわかります。これは1から始まりません。
誰かがこの振る舞いの考えられる理由を説明できますか?row_number()
構文に変更するものはありますか、または関数値を1から開始するためにSQL Serverで変更する設定はありますか?
oracle - 興味深い Oracle 分析クエリの課題
私は Oracle の分析関数についてはかなりの経験がありますが、これは私を困惑させました。明白な解決策があれば、私は自分自身を蹴ります:)
別のテーブルに挿入、更新、および削除を記録する JOURNAL テーブルがあります。
ジャーナルであるテーブルは BOND_PAYMENTS で、PAYMENTS と BONDS の間のリンクを表します。特定の支払い (PAYMENT_ID で識別) から特定の債券 (BOND_NUMBER で識別) に割り当てられた金額 (AMOUNT) を格納します。さらに、「BON」、「PET」、またはその他のコードである可能性のある、結合のどの側面 (BOP_DOMAIN) に割り当てられたかを記録します。BOND_PAYMENTS テーブルには代理キー (BOP_ID) があります。
したがって、私のジャーナル テーブルには通常、各 BOP_ID に対して 1 つ以上のレコードがあります。最初に INSert、その後におそらくいくつかの UPDates、その後におそらく DELete が続きます。
JOURNAL テーブルは次のとおりです。
サンプルデータは次のとおりです。
ここで、このジャーナル テーブルから完全なデータ セットを抽出する必要がありますが、形式はわずかに異なります。主な要件は、ジャーナル テーブルに BOP_DOMAIN を記録させたくないということです。これは必須ではありません。
各 BOND_PAYMENT レコードの合計金額の履歴を生成する必要があります。BOND_PAYMENT テーブル自体は、各レコードの最新のステータスしか表示されないため、使用できません。ジャーナルからこの情報をマイニングする必要があります。
SUM(amount) over(partition by payment_id, bond_number)
個々の BOP_ID は数回更新される可能性があるため、単に取ることはできません。そのため、いつでも、その BOP_ID について記録された最新の金額のみを使用する必要があります。
上記のサンプル データが与えられた場合、生成されると予想される図を次に示します。
ここでは、2 つのサンプル支払いについて、左側にサンプル データを再現しました。右側には、期待される出力である「Running Total」があります。その横 (赤) は、各行の現在の合計を計算する方法のロジックです。
「現在の合計」は、仕訳入力の時点での、PAYMENT_ID と BOND_NUMBER の組み合わせの合計金額のスナップショットです。特定の BOP_ID が数回更新される可能性があることに注意してください。合計金額は、その BOP_ID の最新のレコードのみを考慮する必要があります。
機能するソリューションはすべて受け入れられますが、分析関数 (または分析関数の組み合わせ) がこれを解決するための最良の方法になると思います。
sql - SQLクエリから目的のデータを取得できません
ここでは、既存のクエリは次のように機能しています。
会社が1000のファンドを配布していて、各ファンドの価格が2であるとします。
現在、これらの1000の資金は4人の従業員に分配されています。
基本的な問題は、1人の従業員の資金の最大値を取得することです。仮に、資金の分配は次のとおりです。
したがって、ここでは1人の従業員に対する資金の最大値=600です。
これは、クエリによって取得できるようになりました。
しかし、次の問題は、emp_count_with_max_value
各グループでこの最大値を与えられた従業員の数を持つはずの別の列()を取得することです。
この例では、3人の従業員であることがわかります。しかし、私は同じものを取得することはできません
ここでは、1つのグループのデータのみを示しました。結果のクエリ出力は次のようになります。
oracle - ORA-00907クエリで分析関数を使用するとエラーが発生します(PS / Query、Peopletools 8.51.12)
値のリストを条件に貼り付けようとすると、クエリがORA-00907エラーをスローします。
背景:私は開発者ではありません。会社の実装のために、Peoplesoft内でPS/Queryを使用してクエリを記述できるようになるまで十分に研究されたエンドユーザーです。私は、現在バージョンFSCM 8.90.08.024であるPeoplesoftのFSCMモジュール(Financials and Supply Chain Management)を使用しており、ベースデータベースとしてOracle11gを使用していると思います。
私はほとんど独学で、私たちが持っている技術専門家はデータベース/アプリケーション関連のもので忙しい、または彼らは私のセクションの特定のデータニーズに精通していません。
データベースをクエリするSQLステートメントを直接記述できないことを指摘しておく必要があります。「PS/Query」(クエリマネージャーとも呼ばれます)と呼ばれる組み込みプログラムをGUIで使用する必要があります。このプログラムは、SQLを書き込み、データベースに実行してデータを抽出できるクエリとして保存します。これは、次の点でのみ私の質問に関連しています。
PS / Queryは、Oracleのドキュメントやこのようなサイトを除けば、これまでのところSQLに関する私の唯一の経験です。私の調査によると、これは「実際の」SQLプログラマーによって非常に制限されていると考えられています。この制限により、SQLコーディングのベストプラクティスと思われる方法に違反する方法で作業を行う必要があります。
クエリリクエスト:特定のシステム定義のカテゴリコードに対して(バウチャーとPOの)支出を引き出す、作成をリクエストされたクエリがあります。私がやろうとしているのは、バウチャーIDを取得し、ベンダーとカテゴリコードごとに商品の金額を合計して、結果を表示することです。つまり、ベンダー/カテゴリの一意の組み合わせごとに、そのベンダー/カテゴリの組み合わせを持つすべてのバウチャーの金額を合計します。
SUM(フィールド名)OVER(PARTITION BYフィールド名、フィールド名)構文を使用します。
したがって、最終結果は次のようになります...
そうは言っても、上記の結果セットを取得するためにクエリマネージャーが表示しているSQLは次のとおりです。
根本的な問題:これは正常に機能しますが、一度に1つのカテゴリコードでしかプロンプトを表示できません。カテゴリコードは5桁で、3桁の「クラス」、ダッシュ、2桁の「サブクラス」です。このクエリ結果を取得するために必要な375のカテゴリコードのリストがあります。
このバージョンでは、ワイルドカードの入力を許可するプロンプトを設定しました(つまり、123-%%)が、それでもクエリを約100回実行することになります。Query Managerでは、Criteriaで「InList」式タイプを使用できますが、リストの各エントリを手動で入力する必要があります。
コードリストのプレーンテキストコピーを適切な引用符/カンマを使用して式に貼り付け、指定されたすべてのNIGPコードの組み合わせリストを取得できるように設定しようとしています。Query Managerによって作成されたPromptフィールドでは、リストの貼り付けは許可されていません(私が知る限り)。
解決策の試み:http://peoplesoft.ittoolbox.com/groups/technical-functional/peoplesoft-other-l/create-an-expression-in-psoft-90-query-to-paste-a-のページを表示しましたlist-of-emplids-2808427と私はそこで与えられた答えのいくつかを試しましたが、どれもうまくいきませんでした。そのページから、この変更されたSQLを試してみることになりました(明らかに、コードのリストはここに表示するために少し切り捨てられています)。
そして、上記のSQLは、ORA-00907エラーを引き起こしているものです。誰かが以前にこの問題に遭遇したことがありますか?テキストの巨大な壁、私は知っています。謝罪いたします。これはここでの私の最初の投稿であり、関連するものを何も残さないようにしています。
この質問に拍車をかけた当面の問題は修正されましたが、その要求は非常に大きな氷山の一角にすぎません。ある時点で、クエリマネージャーを使用してプレーンテキストリストを基準として貼り付ける方法を見つける必要があります。 、できればAnalyticGroupingとうまく連携する方法で。
TL; DRバージョン:
Peoplesoft Query Managerを使用して、OVER、PARTITIONBYを使用したグループ化で分析SUMを実行します。リストを条件に貼り付けようとすると、ORA-00907エラーがスローされます。
どんな助けでも大歓迎です。ありがとう!
sql - Oracleのdense_rank()分析関数
Sal
group by 句にある必要があるため、このクエリは機能しませんでした。その理由を誰でも説明できますか? group by 句を変更せずに同じ選択でランクを取得する代替手段はありますか? 給料だけで順位をつけたい。
編集
empテーブルに別の列名commisionがあり、deptnoとcommisionでグループ化し、deptnoのみでパーティション化する必要があるとします。推奨される答えは次のとおりです。
depno と commision でグループ化し、deptno でのみパーティション分割する方法を教えてください。
別の列でグループ化して、別の列での分割に基づいてランクを検索するにはどうすればよいですか
oracle - 最大日付で記録をとる
いくつかのデータセットを抽出するとします。
すなわち
(Aの値ごとに)最大日付のレコードだけが必要です。私は書くことができました
しかし、私のクエリは本当に長いです... ANALYTIC FUNCTIONを使用して同じことを行うよりコンパクトな方法はありますか?
sql - 結果に複数の行がある場合にのみデータをフェッチする
abc
列p_id
、u_id
、およびを含むテーブルがあるとしますcomments
。特定の値に対して複数の行がある場合にのみ、このテーブルからデータをフェッチしたい(テーブルには、無視したいp_id
すべての「ジャンク」データの行が1 つある)。カーソルからデータをフェッチせずp_id
に a に複数の行があるかどうかを判断できるように、クエリを構造化するにはどうすればよいですか。p_id
現在、私のコードは次のようになっています