問題タブ [window-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 に答える
1364 参照

sql - ピボット内のウィンドウ関数、それは可能ですか?

私はこのテーブルを持っています

ここに画像の説明を入力してください

そして、感情を列として表示するピボットを作成する必要があります。平均の感情レベルは、user_id、user_date、emotionでグループ化されています。たとえば、user_id = 1、user_date = 2011-07-13、emotion ='Anger'の場合、平均のemotion_levelは4.0になります。

ピボットを作成します。

これは半分は機能しますが、すべての感情の平均のemotion_levelを計算しますが、ユーザー、日付、感情でグループ化された感情については計算しません。

最初のユーザーの結果+感情='怒り'=2ですが、4になるはずです。

ここに画像の説明を入力してください

おそらく、ウィンドウ関数(over(user_id、user_date、emotionによるパーティション))を使用する必要がありますが、構文を実行できません。

それは可能ですか?

私はprodでPostgreSQL9を使用していますが、上記の例はSQLServerで記述されています。

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

sql - Vertica SQL クエリを最適化して累計を実行する

次のような時系列データを含むテーブル S があります。

特定のキーについて、日数が欠落する可能性はありますが、ほとんどありません。

この累積データを別のテーブルに挿入する目的で、デルタ値 (正の INT) から累積列を作成したいと思います。これは私がこれまでに得たものです:

私の SQL フレーバーでは、デフォルトのウィンドウ句は RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ですが、明示的にするためにそこに残しました。

このクエリは非常に遅く、累積カウントに 0 を入力した古い壊れたクエリよりも桁違いに遅いです。累積数を生成する他の方法に関する提案はありますか?

私はここで解決策を見ました: テーブル内のグループ化されたレコードによる累計

私が使用している RDBM は Vertica です。Vertica SQL は最初のサブセレクト ソリューションを排除し、そのクエリ プランナーは、2 番目の左外部結合ソリューションが上記の分析形式よりも約 100 倍コストがかかると予測します。

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

sql - Postgres SQLで正の集計値を選択し、負を無視する

特定の変換を適用する必要がありますfn(argument)。ここでargumentは に等しいがvalue、負の場合はそうではない. 最初の負の値を取得するvalueと、連続した値で合計され、この合計が正になるまで「待機」します。それからあなたはそうしますfn(argument)。取得したいテーブルを参照してください。

すべての値を合計して合計に適用fnするfnこともできますが、行ごとに異なる場合があり、具体的な fn を選択するには行番号を知ることが不可欠です。

Postgres SQL ソリューションが必要なため、ウィンドウ関数が適合するように見えますが、まだそれを行う式を書くのに十分な経験がありません。実際、残念ながら、私は「SQLで考える」のは初めてです。これは命令型の方法で簡単に実行できると思いますが、ストアド プロシージャはまだ書きたくありません。

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

audio - オーディオ信号のパワー スペクトルを構築するときに、ウィンドウ関数をサンプルに適用する必要があるのはなぜですか?

オーディオ信号のパワー スペクトルを取得するための次のガイドラインを何度か見つけました。

  • N 個のサンプルを収集します。ここで、N は 2 の累乗です。
  • サンプルに適切なウィンドウ関数を適用します。たとえば、Hanning です。
  • ウィンドウ処理されたサンプルを FFT ルーチンに渡します。理想的には、実数から複素数への FFT が必要ですが、複素数から複素数への FFT しかない場合は、すべての虚数入力部分に 0 を渡します。
  • FFT 出力ビンの 2 乗の大きさを計算します (re * re + im * im)
  • (オプション) 各振幅二乗出力ビンの 10 * log10 を計算して、振幅値を dB で取得します。
  • パワー スペクトルが得られたので、あとはピークを特定するだけです。適切な S/N 比があれば、これは非常に簡単です。周波数分解能は、N が大きいほど向上することに注意してください。上記のサンプル レートが 44.1 kHz で N = 32768 の例では、各ビンの周波数分解能は 44100 / 32768 = 1.35 Hz です。

しかし...なぜサンプルにウィンドウ関数を適用する必要があるのでしょうか? それは本当にどういう意味ですか?

パワー スペクトルはどうですか。サンプル レートの範囲内の各周波数のパワーですか。(例: サウンドの Windows Media Player ビジュアライザー?)

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

sql - Postgres でユーザーごとに N 行ごとに選択する

私はこのSQL文を使用していました:

ただし、テーブルが新しい行を取得するたびに、クエリの結果は異なります。
何か不足していますか?

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

postgresql - Postgres は、ウィンドウ関数 (集計) を使用して WHERE 句を VIEW にプッシュしますか?

Pgのウィンドウ関数のドキュメントには次のように書かれています:

ウィンドウ関数によって考慮される行は、クエリの FROM 句によって生成された "仮想テーブル" の行であり、WHERE、GROUP BY、および HAVING 句 (存在する場合) によってフィルター処理されます。たとえば、WHERE 条件を満たさないために削除された行は、どのウィンドウ関数にも表示されません。クエリには、さまざまな OVER 句を使用してさまざまな方法でデータをスライスする複数のウィンドウ関数を含めることができますが、それらはすべて、この仮想テーブルによって定義された行の同じコレクションに対して機能します。

しかし、私はこれを見ていません。選択フィルターが左マージンと上部に非常に近いように思えます (最後に行われたこと)。

これらの 2 つの WindowAgg は、基本的に計画をはるかに速いものから決して終わらないように見えるものに変更します。

どうすれば修正できますか? Postgresql 8.4.8 を使用しています。実際のビューが行っていることは次のとおりです。

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

sql - PostgreSQLのクエリのウィンドウ関数でエイリアスを使用する

私はPostgreSQLバージョン9.1を使用しており、Postgresのドキュメントを見ると、次のことが可能であることがわかっています。

これは私のクエリで機能します。

OVER (ORDER BY ...)ここで、 ?で列名の代わりにエイリアスを指定できるようにする必要があります。

私はこれを試しました:

編集:rank()私は以前、このクエリにを追加するのを忘れていました:

そして私はそれを言っているエラーを受け取っていますcolumn "result" does not exist.

ここで列名の代わりにエイリアスを指定することはできますか?特別な構文がありませんか?

編集:

私はHibernateを使用しており、ウィンドウ関数にネイティブSQLを使用しています。生成および実行される完全なSQLは次のとおりです。

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

sql - GROUP BY および連続した数値の集計

PostgreSQL 9.0 を使用しています。

companyprofessionおよびのフィールドを含むテーブルがあるとしyearます。一意の会社と職業を含む結果を返したいのですが、数値シーケンスに基づいて年を集計します (配列に入れることは問題ありません)。

例の表:

次のような行を出力するクエリに興味があります。

重要な特徴は、連続した年のみがグループ化されることです。

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

sql - PostgreSQL:「分単位」のクエリの実行中の行数

その分までの行の合計数を毎分クエリする必要があります。

これまでに達成できた最善の方法ではうまくいきません。各分までの合計カウントではなく、1 分あたりのカウントを返します。

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

python - 複数の列の主キーに対してウィンドウクエリを実行するにはどうすればよいですか?

ここで見つけた例に基づいていますが、私はそれを理解していないと思います。これは単一列の主キーでは機能しますが、複数の主キーでは失敗します。これは私のコードです

主キーの列のセットを比較するときに問題が発生しました。さて、再帰句生成関数のようなものがそれを行うべきだと思います...それを試してみましょう...