問題タブ [distinct-on]
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 - PostgreSQL - 特定の値を持つ最も古いレコードを見つける
履歴テーブルにすべての履歴イベントを記録するドキュメント管理システムがあります。特定のクライアントの特定の日付のステータスが 5 である最も古い doc_id を提供できるようにするよう求められました。表は次のようになります (簡単にするために切り捨てられています)。
client_id 列と status_id 列は、イベント発生後のドキュメントの値です。これは、doc_id で定義されたドキュメントの最大履歴イベント行が、ドキュメント テーブルの同じ列と一致することを意味します。特定のイベント日付でイベントを制限すると、その時点でのドキュメントの値を確認できます。これらの値は静的ではないため、status_id が 5 の特定の client_id を単純に検索することはできません。見つかった結果がドキュメントの max(id) と一致しない可能性があるからです。うまくいけば、それはある程度の意味があります。
私が動作することがわかったが、遅いのは次のとおりです。
基本的に、指定された最大イベント日付の前に特定のドキュメント ID の最大 ID を取得し、その最大履歴アイテムが指定されたクライアントに割り当てられ、ステータスが 5 に設定されていることを確認しています。
私のやり方の欠点は、すべてのクライアントのすべての履歴レコードをスキャンして最大値を取得し、1 つのクライアントとステータスについて探しているものを見つけることです。現在のところ、これは約 1506 万行をスキャンし、私の開発サーバーでは約 90 秒かかります (これは非常に高速ではありません)。
さらに複雑なことに、これを前の週の各日、つまり実行ごとに合計 7 回行う必要があります。さらに、システム内のすべてのドキュメントは、新規を表すステータス 5 で始まります。これにより、このクエリは、そのクライアントに対して入力された最初のドキュメントを返すだけになります。
私が望んでいるのは、最初にすべてのクライアントのすべてのドキュメント ID の最大 ID を見つける必要なく、特定のクライアントとステータス値に一致する特定のドキュメントの最大履歴レコードが見つかるまでスキャンすることです。これがウィンドウ関数 (partition by) や、現在表示されていないその他のロジックで実行できるかどうかはわかりません。
doc_history テーブル内のイベントの 1 つの例:
イベント 7 はステータスが変更されたもので、古い値と新しい値は、ステータスが 5 から 1 に変更されたことを示しており、status_id 列に反映されています。event_date が 2013-02-17 23:59:59 以下の場合、上記のレコードは status_id が 5 の最も古い「NEW」ドキュメントになりますが、2013 年 2 月 17 日以降はそうではありません。
sql - あまりにも多くのレコードを返す DISTINCT を選択します
Products と Items の 2 つのテーブルがあります。でソートされdistinct
た列に基づいて、製品に属するアイテムを選択したいと考えています。condition
price ASC
望ましい出力:
これがクエリです。必要な 3 つのレコードではなく、6 つのレコードを返します。
sql - PostgreSQL: ソート順に基づいて ID ごとに最初のレコードのみを選択する
次のクエリでは、最も低い shape_type 値 (1 から 10 の範囲) を持つ最初のレコードのみを選択する必要があります。これをpostgresqlで簡単に行う方法についての知識があれば、助けてください。御時間ありがとうございます。
php - doctrineで「distinct on」を使用するには?
doctrine で「distinct on」を使用しようとしましたが、次のエラーが発生しました。
エラー: 既知の関数が予期されていましたが、「オン」になりました
次のクエリを実装するにはどうすればよいですか?
どうやらクエリビルダーでこれを行うことはできないようです。さまざまな方法でクエリを書き直そうとしました。
しかし教義は LIMIT をサポートしていません:
唯一の解決策は、ネイティブ SQL クエリを使用することだと思います。
postgresql - PL/pgSQL : DISTINCT ON はその結果を次の CTE に渡しますか?
私のコードはかなり巨大なので、次のようになります (スキーマ)。
したがって、この状況を想像してください: DISTINCT ON (x1,x2,x3,x4)を使用something
した後
(ここでは無視something2 and something3
) : 1700 件の結果が得られます。
しかし、問題は、これが私の期待した結果ではないことです (まだ)。
したがって、同じDISTINCT ONがsomething
あり、そうする場合
select * from something3
(これは 1700 行を返す最終的な予想結果です)
で前に区別したかった値を含む 4000 の結果が突然得られますsomething
。
同じ構文を入力すると、 DISTINCT
I've typed in が失われているようです。something
DISTINCT ON (x1,x2,x3,x4) ...
3つすべてでsomething's
1700の結果が得られます-しかし、それは私が探しているものではありません.
時間は私にとって大きな意味があります。
ここで解決策と問題の理解を深めるために、誰かが私を助けてくれませんか?
postgresql - Postgres: 異なるが、1 つの列と最新の列のみ
次の元のテーブルがあります
私が欲しいのは、最新の history_id を別個の new_id で取得することです。次のように:
このdistinct_but_only_one_columnを見つけましたが、個別の 1 つの列を取得する方法しか含まれていません。私を助けてください。
sql - 空の n:n 関係で DISTINCT ON を使用する
私は PostgreSQL の新しいユーザーです。使用しようとしていますDISTINCT ON
が、目標を達成できません。
これが私のデータベースの簡単なスケッチです:
- バージョン管理されたファイル
- モデルを含むフィールド (フォーム生成用)
n:n
ファイルのバージョンとフィールドの関係
指定したファイルのバージョンのフィールド セット全体を取得したいと考えています。
私の問題は、空の値を持つことができる (そしてそうする) ことです。FileVersion_Field 関係がありません。以下に例を示します。
この例では、次の結果を得たいと考えています。
これが私が試したことですが、うまくいきません:
sql - PostgreSQL 9 で DISTINCT ON を GROUP BY に置き換える方法は?
私は DISTINCT ON 述語を使用してきましたが、これを GROUP BY に置き換えることにしました。これは主に、「SQL 標準の一部ではなく、結果が不確定である可能性があるため、不適切なスタイルと見なされる場合がある」ためです。
履歴テーブルで最新のレコードを選択するために DISTINCT ON を ORDER BY と組み合わせて使用していますが、GROUP BY で同じことを行う方法がわかりません。ある構造から別の構造に移行するための一般的なアプローチは何でしょうか?
例は次のとおりです。
ここで、(f1,f2) の「最新」のペアを取得します。
postgresql - オフセット、制限をいじるとPostgreSQLの変更結果
こんにちは皆さん、以下のクエリを使用しています
制限を10または20に変更すると、結果が異なります
postgresqlを学んでいますが、何が問題なの
かわかりませんpostgresql固有の警告はありますか?
期待される結果
単純に、個別の wapi_publications とその最後の問題を wapi_issues.issue_identifier で並べ替えて取得したいだけです
結果が違うと言いたいのは
制限が 10 の場合。
制限が 20 の場合。