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

oracle - selfjoin を分析関数に置き換える

分析を使用して次の自己結合を置き換えるにはどうすればよいですか。

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

sql - 「日付が最大の行の属性」の分析関数

私は同僚のコードをリファクタリングしていますが、彼がカーソルを使用して「述語に一致する最新の行」を取得しているケースがいくつかあります。

彼の手法は、結合をカーソルとして記述し、日付フィールドの降順で並べ替え、カーソルを開き、最初の行を取得して、カーソルを閉じることです。

これには、これを駆動する結果セットの各行に対してカーソルを呼び出す必要があり、多くの行ではコストがかかります。私は参加できることを望んでいますが、相関サブクエリよりも安価なものは何ですか:

これは一般的なニーズであるため、これを行う Oracle 分析関数があると思いますか?

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

oracle - Oracle SELECT クエリ: 日付をペアにするときに null 値を折りたたむ

次の Oracle クエリがあります。

これにより、次のようなデータが得られます。

私が欲しいのは次のようなデータです:

つまり、id/のすべての一意のペアを保持しopen_inopen_outそれに続くopen_in. 特定の に対して任意の数の一意の値が存在する可能性があり、任意の数の一意の値open_inが存在する可能性があります。一意の/に一致する値がない可能性があります。その場合は、その行に対応する必要があります。idopen_outidopen_inopen_outopen_outnull

LAGここでは、おそらくまたはという分析関数LEADが役立つと思います。おそらく私はMINで使用する必要がありPARTITIONます。

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

sql - 各グループに一定数の行を選択するにはどうすればよいですか?

これは、mysql テーブルのデータの例です。

ランダムに選択された距離ごとに 2 行を取得するように、このテーブルをクエリするにはどうすればよいですか?

クエリが成功すると、次のようなものが生成されます

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

sql - SQLの初心者向けの質問:Stack ExchangeDataExplorerでゴールドとシルバーのタグバッジをクエリする

Stack Exchange Data Explorerを使用してSQLを学習していますが、質問の基本は他のデータベースにも当てはまると思います。

私はBadgesテーブルをクエリしようとしています。Stexdexによると(これからこれを呼び出します)、次のスキーマがあります。

  • バッジ
    • Id
    • ユーザーID
    • 名前
    • 日にち

[Epic]これは、のような一意の名前のバッジには適しています[Legendary]が、シルバーとゴールドのタグ固有のバッジは、まったく同じ名前を持つことで混ざり合っているようです。

[mysql]これが私がタグのために書いたクエリの例です:

(わずかに注釈が付けられた)出力は次のとおりです。stexdexで見られるように

これは、この記事の執筆時点でのシルバーゴールドの獲得者の現在のリストと一致していますが、より時代を超越した言葉で言えば、2010年5月末現在、ゴールド[mysql]タグを獲得しているのはQuassnoiとBillKarwinの2人だけです。上記の結果では、2回表示されるのは名前だけです。

だからこれは私がそれを理解する方法です:

  • 初めてId登場するのは(時系列で)シルバーバッジ用です
  • 二度目は金のためです

さて、上記の結果はシルバーとゴールドのエントリーを混ぜ合わせています。私の質問は次のとおりです。

  • これは典型的な設計ですか、それとももっとフレンドリーなスキーマ/正規化/あなたがそれを呼んでいるものは何ですか?
  • 現在のデザインでは、シルバーバッジとゴールドバッジを別々にクエリする方法を教えてください。
    • GROUP BY IdDateどういうわけかで最小/最大または最初/秒を選ぶ?
    • 最初にすべてのシルバーバッジをリストし、次にすべてのゴールドバッジをリストするクエリをどのように作成できますか?
      • また、「実際の」クエリは、日付ごとにリストするだけでなく、より複雑になる可能性があることも想像してみてください。
      • シルバーとゴールドのサブクエリの間で繰り返しが多すぎないように、どのように記述しますか?
    • 代わりに、2つの完全に別個のクエリを実行する方がおそらくより一般的ですか?
    • このイディオムは何と呼ばれていますか?それらを「バケット」か何かに入れるための行の「パーティション化」クエリ?

要件の明確化

もともと私は次の出力が欲しかったのですが、本質的には:

しかし、これまでのところ、シルバーとゴールドの列が分かれているという答えも素晴らしいので、その角度も自由に追求してください。しかし、私はあなたが上記をどのように行うのかまだ興味があります。

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

sql - 興味深い Row_Number() バグ

Stack Exchange Data Explorerで遊んでいて、次のクエリを実行しました:
https://data.stackexchange.com/stackoverflow/query/2820/rising-stars-top-50-users-ordered-on-rep-per-day

結果に注目してください。row_number() 関数はクエリと同じパラメーターによる順序をとりますが、行 11 と 12 は同じ値を持つため、番号が間違っています。

ここでの正しい修正は、order by 句で追加のタイブレーカー列を指定することだとわかっていますが、row_number() 関数が同じデータに対して異なる結果を返す理由/方法についてもっと知りたいですか?

どこかで違いがあれば、これは Azure で実行されます。

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

sql - Sql Server Compact EditionのSELECTステートメントでランク関数を複製するにはどうすればよいですか?

SQL Server Compact EditionがRANK()関数をサポートしているようには見えません。( http://msdn.microsoft.com/en-us/library/ms174077(SQL.90).aspxのFunctions(SQL Server Compact Edition)を参照してください)。

SQL Server Compact EditionのSELECTステートメントでRANK()関数を複製するにはどうすればよいですか。

(SQL Server 2005 Management Studioで開くことができるのはNorthwind.sdfだけなので、サンプルのselectステートメントにはNorthwind.sdfを使用してください。)

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

sql - 年間上位 N 人の打者を見つけるにはどうすればよいですか?

MySQL インスタンスでラーマン ベースボール データベースをいじっています。各年の本塁打数 (HR) を上回った選手を見つけたい。バッティング テーブルには、そのスキーマの次の (関連する部分) があります。

毎年、すべてのプレーヤーがエントリを持っています (1871 年にさかのぼると、年間数百から 12,000 の間)。1 年間の上位 N 人の打者を獲得するのは簡単です。

しかし、私は毎年トップ 3 を見つけることに興味があります。私はこのような解決策を見つけ、カテゴリからトップを選択する方法を説明し、それを私の問題に適用しようとしましたが、返されないクエリになってしまいました:

どこで間違ったのですか?

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

mysql - mysql:IDでグループ化し、IDごとに最高の優先度を取得します

「pics」と呼ばれる次のmysqlテーブルがあり、次のフィールドとサンプルデータがあります。

単一のクエリで、Vehicle_idごとに1つの行を取得し、その行を最高の優先度にすることは可能ですか?

私が探している結果:

単一のクエリで不可能な場合、最善のアプローチは何でしょうか?

ありがとう!

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

oracle - Oracle SELECT クエリ: 異なるフィールドの日付をペアにするときに NULL 値を折りたたむ

この質問は私の前の質問とよく似ていますが、もう少し複雑です。 Rob van Wijk の回答は、私の他の質問に対して完全に機能し、それを出発点として使用してきました。私の問題は、さまざまなフィールドの日付をピボットしていることです。以前は、与えられた の allopen_inと のopen_out値を取得することに関心がありましたがid、今はnew_in, new_out, open_in, open_out,fixed_infixed_outfor each が必要idです。私は次のものを持っています:

これにより、次のようなデータが得られます。

以下のようなデータが欲しいです。

データをピボットして、それぞれのこの日付ペアを取得するにはどうすればよいidですか?

編集: 明確にするためにid、状態に複数回出入りできます。たとえば、id新規からオープン、修正済み、オープン、修正済み、クローズドに進む場合があります。その場合、すべての状態時間を保持するのに必要な数の行が必要になります。たとえば、次のようになります。