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

sql - GROUP BY ギャップで区切られた連続した日付

(Postgres 9.1 に) 次のようなテーブルがあるとします。

そこにはいくつかのギャップがあります(つまり、min(date)とmax(date)の間のすべての可能な日付に行があるわけではありません)。

私の問題は、次のように、各一貫したグループ (ギャップなし) が個別に処理されるように、このデータを集計する方法です。

それを行う方法はありますか?ウィンドウ関数で可能だと思いますが、しばらく試してみるとlag()lead()少し行き詰まりました。

たとえば、データが次のような場合:

出力(sum集計として)は次のようになります。

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

sql-server - TSQL の別の列の各値のモードを計算する方法

次のようなテーブルがあります。

性別ごとにモードグループを計算しようとしています。つまり、性別ごとに、最も人気のあるグループを教えてください. したがって、私が望む結果は次のようになります。

同点の場合は、同点のグループごとに返されるレコードが必要です。

TSQLでこれをエレガントに行うにはどうすればよいですか? ウィンドウ関数を使用する必要があると思いますが、どうすればいいのか苦労しています。

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

postgresql - postgresql の N 日ごとに基づくグループ化

ID、日付、値 (温度) などを含むテーブルがあります。私のテーブルは次のようになります。

合計や平均などの集計クエリを 10 日ごとに実行したいと考えています。

psqlで可能かどうか疑問に思っていましたか?

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

arrays - 行数で値を集計する

一連の行があり、これらの行の値をN要素のグループに集約し、現在の行とN-1後続の行の値を累積する必要があります。

N=3データは次のとおりです。

次の行セット (配列) を受け取りたい:

これはN変数なので、結合は使用できません。

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

sql - 連続した繰り返し/重複の順序付きカウント

私はこれを最も効率的な方法で行っているとはとても思えないので、plpgsqlここにタグを付けました。これを1,000 の測定システムに対して20 億行で実行する必要があります。

接続が失われたときに以前の値を報告することが多い測定システムがあり、頻繁に、場合によっては長期間にわたって接続が失われます。集計する必要がありますが、その場合は、それがどのくらい繰り返されているかを見て、その情報に基づいてさまざまなフィルターを作成する必要があります。車でmpgを測定しているとしますが、20.1などに移動するよりも1時間20 mpgにとどまっています。詰まったときの精度を評価する必要があります。車が高速道路上にあるときを探すいくつかの代替ルールを配置することもできます。ウィンドウ関数を使用して、車の「状態」を生成し、何かをグループ化することができます。難しい話は抜きにして:

では、巨大なテーブルでこれを実行するには、どのように変更しますか? または、どの代替ツールを使用しますか? これはデータベース内またはデータ挿入プロセス中に行う必要があると思われるため、plpgsql を考えていますが、通常はデータが読み込まれた後にデータを操作します。サブクエリに頼らずにこれを 1 回のスイープで取得する方法はありますか?

別の方法を1 つテストしましたが、それでもサブクエリに依存しており、こちらの方が高速だと思います。その方法では、start_timestamp、end_timestamp、system を使用して「開始と停止」テーブルを作成します。次に、より大きなテーブルに参加し、タイムスタンプがそれらの間にある場合は、その状態にあると分類します。これは、本質的にcumlative_sum_of_nonrepeats_by_system. しかし、これを行うと、数千のデバイスと数千または数百万の「イベント」に対して 1=1 で参加します。そのほうがいいと思いませんか?

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

sql - 1時間ごとに、ある範囲の時間にわたって値を集計します

タイムスタンプと測定を含むテーブルを持つPostgreSQL9.1データベースがあります

1時間ごとに8時間の範囲で値を平均する必要があります。言い換えれば、私は1時間から8時間、2時間から9時間、3時間から10時間などの平均が必要です。

私はそのような質問をどのように進めるのか分かりません。私はいたるところを探しましたが、どの機能を探すべきかについての手がかりもありません。

私が見つけた終値は、時間/日平均またはブロック平均(たとえば、1時間から8時間、9時間から16時間など)です。しかし、これらの場合、タイムスタンプはdate_trunc()関数を使用して単純に変換されます(以下の例のように)。これは私には役に立ちません。

私が探しているのは、これに似た機能です

ただし、group-by句では、1時間ごとにある種の8時間の範囲を使用します。それも可能ですか?

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

sql - 結合されたテーブル列の個別の合計を取得する

ここで問題が発生しました。簡単な解決策があることを願っています。これをできるだけ簡単にしようとします:

  • チケットは出席者のものです
  • 例:

  • 出席者には、「収益」と呼ばれる 10 進数の列があります。

とはいえ、総収益など、チケットに関するさまざまな情報を返すクエリを実行する必要があります。問題は、2 つのチケットが同じ出席者に属している場合、収益が 2 回カウントされることです。出席者の収益を 1 回だけ合計するにはどうすればよいですか?

私のORMがこれを困難にするため、サブクエリを使用したくありません。さらに、複数の列に対してこれを実行したい場合、サブクエリソリューションはスケーリングしません。

ここに私が持っているものがあります:

  • 収益が 100 の参加者 1 人
  • 両方ともその出席者に属する 2 枚のチケット

=> これattendees_revenueは 200 であることを示しています。私はそれを 100 にしたいと考えています。データベースには 100 の existing_revenue を持つ出席者が 1 人いるためです。出席者が二重にカウントされることは望ましくありません。

これが可能かどうか教えてください。

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

sql - 定義困難なパーティションの平均

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

そして、私はこの出力が欲しい:

テーブルが日付の降順で並べ替えられている場合、null 値と 1 つの前の非 null 値を、前の非 null 値の平均に置き換えたいと考えています。この例では、値 15 は、次の 2 つの null の前の非 null 値です。したがって、15 / 3 = 5 です。

SQL フィドル

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

sql - PostgreSQL のウィンドウ関数の末尾の日付

特定のコンピューターの今日の平均接続数を 7 ~ 14 日前の平均接続数と比較するクエリを作成しようとしています。これはウィンドウ関数で処理するのが最適だと考えましたが、日付の正しい構文を取得できません。

iptable という名前の IP アドレスと接続レコードのテーブルがあり、列として soucreip、destinationip、timestamp があるとします。sourceip ごとのカウントを取得するために、前の 7 日間のウィンドウに対して試みているクエリを次に示します。

このタイプのクエリを作成する最良の方法は何ですか? ウィンドウ関数アプローチは理にかなっていますか? または、大きなテーブルの場合により最適化された方法はありますか?

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

sql - max(timestamp) で行を取得します

最近コメントされた記事を選択する必要があります。各記事の最後のコメント、つまり次を含む行の他の列ですmax(c.created)

Postgres は、c.text を GROUP BY に入れる必要があると教えてくれます。明らかに、私はこれをしたくありません。最小/最大も適合しません。これを選択する方法がわかりません。

ご意見をお聞かせください。