問題タブ [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 投票する
1 に答える
1458 参照

sql - Oracle-max()を使用してサブクエリをリファクタリングします

以下のクエリがあります。SOFTWARE_DEVELOPMENT_CYCLEには複数の行がありますが、最新のものに興味があります。

サブクエリを使用しないようにクエリを書き直したいと思います。DENSE_RANK LAST ORDERY BYで試しましたが、役に立ちませんでした。

誰かアドバイスしてもらえますか?ありがとうございました。

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

sql - パーティションを持つテーブルに書き込まれた Oracle クエリの最適化

Oracle には、日付列のパーティションを持つ約 5,500 万のレコードで構成される 1 つのテーブルがあります。

このテーブルには、ある位置に基づいて、毎日約 600,000 レコードが格納されます。

現在、いくつかの分析関数がプロシージャ内の 1 つの選択クエリで使用されています。たとえば、lead、lag、row_number() over(partition by col1、date order by col1、date ) は、'partition by' と 'order by' のために時間がかかりすぎています。 ' 日付列の句。

クエリを最適化する他の方法はありますか?

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

sql - SQL-ROW_NUMBER()OVER(ORDER BY)が機能しない

句に何を入れてもORDER BY、結果セットの順序は変わりません。

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

sql - Oracle Analytics ウィンドウ

次の表を考えると

および次のクエリ:

次の結果が得られます。

期待される:

RUNNING_BALANCE が負の数として返されるのはなぜですか? 明らかな abs() 以外に、どうすればそうしないことができますか?

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

database - order by句がない場合、OracleのFIRST_VALUE()関数はどのように行を処理しますか?

First_value() の定義は、順序付けられたデータ セットの最初の値を返すことを示しています。その構文は

First_Value(ColumnName) over ( [Partition By Column] [Order by Column] )

Partition By と Order By はオプションです。partition by を削除すると、セット全体の最初の値が取得されます。

私の質問は、Order By を削除するとどうなるか?? オラクルは暗黙的にセットを注文しますか、それともランダムな最初の値を与えるだけですか、それともデータが挿入される順序で最初の値を与えるのですか?

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

sql - Oracle の「Partition By」および「Row_Number」キーワード

他の人が作成した SQL クエリがあり、その機能を理解しようとしています。誰かがここでPartition ByandRow_Numberキーワードが何をするのかを説明し、それを実際に使用する簡単な例と、それを使用したい理由を教えてください。

パーティションの例:

オンラインでいくつかの例を見てきましたが、それらは少し深すぎます。

前もって感謝します!

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

sql - 分析関数を使用して 2 つの日付列を持つレコードを選択するパフォーマンスの高いクエリ

SQL クエリを作成する効率的な方法を探しています。

列 ( idfnamelnameaccountidcreation_date)を持つテーブルがあり、そのテーブル内で同じ、、およびに基づく最新の日付をupdate_date持つレコードを探す必要があります ( null の可能性があることに注意してください)。fnamelnameaccountidgreatest(max(creation_date),max(update_date))update_date

分析関数を使用する必要があると思います

私はこれらのケースを持っています:

最後に挿入されたレコードを選択したい: このレコード (3,'a','a','2','07/01/2010 10:59:43','07/01/2010 10:59:43' )

両方の列 (creation_date,update_date) で最新のもの (4,'b','a','2','07/01/201110:59:43',null) を選択したい

両方の列 (creation_date,update_date) で最新のもの (7,'c','g','4','07/01/2011 10:59:43',null) を選択したい

両方の列 (creation_date,update_date) で最新のもの (9,'k','t','2','07/01/2009 10:59:43','07/01) を選択したい/2012 10:59:43')

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

sql - 列の値に基づいた行のランク付け/カウント

このsqlfilddleで説明されている形式のデータがあります:http ://sqlfiddle.com/#!4 / b9cdf / 2

基本的に、ユーザーIDとイベントが発生した時刻を含むテーブル。私がやりたいのは、ユーザーが発生した時間に基づいてイベントをカウントすることです。したがって、次のようなテーブルは次のようになります。

イベントが発生した順序に基づいて、イベントに数値ランクを割り当てたいと思います。したがって、これは上記の表が次のようになることを意味します。

Oracle SQLでこれを行う方法はありますか?それとも、スクリプト言語に吐き出してそこから取り出す必要がありますか?

ありがとう!

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

oracle - 分析関数を使用してクエリを削除する

最小限のレコードを持つレコードを削除します。2 つのテーブル person (id, otherID) があります。otherID は他の person.id と film (id, country, personID) の参照です。ここで、personID は person.id の外部キーです。

personID と country に関連するレコードが最小限である映画テーブルのすべてのレコードを削除したいと考えています。例えば:

Film(3, fr, 2) Person(1, 2 ) を削除する必要があります->国 fr, 2 の人物 1 の数が、同じ国の他の人物 2 (otherID 列) の数より多いためです。 fr',1.

Person(2, 2) 削除するものはありません

Person(3, 2) は、レコード Film(3, fr, 2) または Film(4, fr, 3) のいずれかを削除します。これは、どちらも国として fr を持ち、カウント = 1 であるが、レコードが Film(3, fr, 2) であるためです。前に削除されたので、Film(4, fr, 3) を保持する必要があります。

ここで、count = フィルムから count(*) を選択 (film.personID、film.country によるパーティション)

そしてキープ

実際には person テーブルの各レコードについて、以下を探します。

a = select count(*) over (partition person.id,film.country)

b = select count(*) over (partition person.otherID,film.country)

a と b の両方に同じ film.country を指定し、min(a,b) を持つレコードを削除します。