問題タブ [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.

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

sql - "DISTINCT ON" を Arel / ActiveRecord と組み合わせて使用​​するには?

私はMessageActiveRecord モデルを持っており、異なる を持つすべてのメッセージを選択したいと考えていますconversation_partner_idDISTINCT ON現在、句を文字列として指定していますが、Arel代わりに式として提供できるかどうか、および利点があるかどうか疑問に思っていました。私の声明は次のようになります。

wheretmessagesテーブルの和集合であり、やや複雑なArel式として指定されます。問題とは無関係であり、問​​題なく機能するため、SELECT省略します。

次のコードは機能しませ

DISTINCT ON ()句の後にコンマを配置すると、不正な形式の SQL になります。

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

sql - postgresql - 1 つの列だけで異なる

eatableというテーブルがあります。type 、 nameなどの列があります。

type列にはfruit, veggie, veggie, fruit, veggie値があります。

name列にapple, brinjal, carrot, banana, cabbage.valuesがあります

タイプ列は2行のみを表示し、名前はすべての値を表示する必要があります。

以下のようになります。

食べられる

以下のクエリを試しましたが、期待どおりではありません。

手伝ってください!!

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

sql - POSTGRES 最小値/最小値

2 つの列を持つ postgres 9.3 テーブルがあります。最初の列には時刻があり、2 番目の列にはルートがあります。ルートは複数回ある場合があります。すべてのルートを最短時間で一覧表示したいと考えています。私のテーブル:

私が出力したいもの:

どんな助けでも感謝します、そして前もって感謝します。

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

postgresql - Redshift PostgreSQL Distinct ON オペレーター

マルチタッチ アトリビューションを確認するために解析したいデータ セットがあります。データ セットは、マーケティング キャンペーンに反応したリードとそのマーケティング ソースによって構成されます。

各見込み客は複数のキャンペーンに対応でき、最初のマーケティング ソースと最後のマーケティング ソースを同じテーブルに取得したいと考えています。

2 つのテーブルを作成し、両方から select ステートメントを使用できると考えていました。最初のテーブルは、すべての人からの最新のマーケティング ソースを含むテーブルを作成しようとします (電子メールを一意の ID として使用)。

次に、重複排除されたメールを含むテーブルを作成しますが、今回は最初のソース用です。

最後に、単純にメールを選択し、最初と最後のマーケット ソースをそれぞれ独自の列に結合したいと考えました。

個別の on は redshift の postgresql バージョンでは機能しないため、誰かがこの問題を別の方法で解決するアイデアを持っていることを望んでいました。

編集 2/22: より多くの文脈のために、私は人々と彼らが反応したキャンペーンを扱っています. 各レコードは「キャンペーン レスポンス」であり、すべての人が複数のソースを持つ複数のキャンペーン レスポンスを持つことができます。人ごとに重複を排除し、最初に応答したキャンペーン/マーケティング ソースと、最後に応答したキャンペーン/マーケティング ソースの列をそれぞれ持つ select ステートメントを作成しようとしています。

EDIT 2/24: 理想的な出力は、email、last_source、first_source、date の 4 つの列を持つテーブルです。

最初と最後のソース列は、キャンペーン メンバー レコードが 1 つだけの場合は同じですが、キャンペーン メンバー レコードが 2 つ以上ある場合はすべて異なります。

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

ruby-on-rails - Rails 4.2.5で個別の選択が正しく機能しない

私はこの2つのモデルを持っています:

ご覧のとおり、Post モデルに全文検索を実装しようとしています。TSVECTOR 列とそれを更新するトリガーを作成しましたが、search_tsvスコープのみを使用する場合、すべてが魅力のように機能します。

しかし、検索結果からの投稿ごとに、最後に追加されたコメントを取得したいと考えています。そのために、full_searchスコープを構築しました。

このスコープを使用しようとすると、生成される SQL クエリは次のようになります。

これは私にとっては問題ありません。しかし、検索コントローラーでこのスコープを使用しようとすると、結果が奇妙になります...

次の SQL クエリが生成されます。

結果は空の配列です:(。

私は自分が何を間違っているのか理解できませんでした[明らかに私はここで何かばかげたことをしています:(]。

これを修正するのを手伝ってもらえますか?

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

sql - 2 つの結合を含む CTE での奇妙な動作

この投稿は、質問をより理解しやすくするために完全に言い換えられています。

PostgreSQL 9.5で実行中の設定Ubuntu Server 14.04 LTS

データ・モデル

データを個別に (時系列で) 保存するデータセット テーブルがあります。これらのテーブルはすべて同じ構造を共有する必要があります。

この定義は に由来するため、データセット名FUNCTIONを表します。%s

このUNIQUE制約により、特定のデータセット内に重複するレコードがあってはならないことが保証されます。このデータセットのレコードはfloatvalue、特定のチャネル ( ) の値 ( ) であり、特定の間隔 ( ) で特定の時間 ( ) に特定の品質 ( )channelidでサンプリングされます。値が何であれ、 の重複はありません。timevaluegranulityidqualitycodeid(channelid, timevalue, granulityid, qualitycodeid)

データセット内のレコードは次のようになります。

また、チャンネルの有効数字を格納する別のサテライト テーブルもあります。このパラメーターは時間とともに変化する可能性があります。私は以下の方法で保管しています。

チャネルに有効数字が定義されている場合、このテーブルに行が追加されます。次に、この日付以降に係数が適用されます。最初のレコードには常にセンチネル値'-infinity'::TIMESTAMPがあります。これは、係数が最初から適用されることを意味します。次の行には、実際に定義された値が必要です。特定のチャネルに行がない場合は、有効桁数がユニタリであることを意味します。

このテーブルのレコードは次のようになります。

ゴール

私の目標は、異なるプロセスによって入力された 2 つのデータセットの比較監査を実行することです。それを達成するには、次のことを行う必要があります。

  • データセット間のレコードを比較し、それらの違いを評価します。
  • 類似レコード間の差異が有効桁数内に収まっているかどうかを確認します。

この目的のために、理解できない方法で動作する次のクエリを作成しました。

クエリは多少読みにくいかもしれませんが、おおよそ次のようになると思います。

  • 一意性制約を使用して 2 つのデータセットのデータを結合し、同様のレコードを比較して差を計算します ( S0)。
  • LEFT JOINそれぞれの違いについて、現在のタイムスタンプ ( ) に適用される有効数字 ( ) を見つけますS1
  • その他の有用な統計 (S2および最終SELECT) を実行します。

問題

上記のクエリを実行すると、行が欠落しています。例:channelid=123では、両方のテーブル (および)granulityid=4で共通の 12 のレコードがあります。クエリ全体を実行して に保存すると、12 行未満になります。次に、レコードが欠落している理由を理解するために調査を開始し、句で奇妙な動作に直面しました。このクエリを実行すると、次のようになります。datastore.rtudatastore.audit0MATERIALIZED VIEWWHEREEXPLAIN ANALIZE

そして、代わりに67106行が必要であることを知っています。

執筆時点でS0は、正しい行数が返されることがわかっています。したがって、問題はさらにあるはずCTEです。

私が本当に奇妙だと思うのは、次のことです。

10 行を返します。

そして次のものは正しい行数を返します:

どこ:

したがって、問題は にあるようS1です。には有効数字が定義されてchannelid = 123いないため、これらのレコードはLEFT JOIN. しかし、これは、一部が欠落している理由を説明していません。

質問

  • このクエリで何が間違っていますか?

有効数字をフェッチするときに正しいカーディナリティを維持するために使用LEFT JOINするため、レコードを削除してはなりません。その後は単なる算術です。

  • 事前フィルタリングは、事後フィルタリングよりも多くの行を返すことができますか?

これは私には少しバグがあるように聞こえます。節を使用しない場合WHERE、すべてのレコード (または組み合わせ) が生成され (それが節であることJOINはわかっていWHEREます)、計算が行われます。WHERE追加(元のクエリ) を使用しないと、行が欠落します (例で示したように)。フィルターに WHERE 句を追加すると、結果が異なります (事後フィルター処理が事前フィルター処理よりも多くのレコードを返した場合は、これで問題ない可能性があります)。

私の間違いやクエリの誤解を指摘する建設的な回答は大歓迎です。ありがとうございました。

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

distinct-on - 明確な 1 列のみ

特定のカテゴリごとに通話時間の合計を返すクエリを作成しようとしています。カテゴリは 3 つしかなく、時間の合計で 3 行だけが返されるようにします。個別を使用するとうまくいくと思いましたが、議事録にも当てはまります。

このクエリを操作して、カテゴリでのみ区別するにはどうすればよいですか?

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

sql - 一部が NULL である多くのフィールドから個別の情報を取得する

6,500 万行と 140 列をわずかに超えるテーブルがあります。データは複数のソースから取得され、少なくとも毎月送信されます。

このデータから特定のフィールドを一意に取得する簡単な方法を探しています。つまり、すべての情報を処理して、どの請求書がどの識別番号で送信され、誰から送信されたかをリンクしたいと考えています。問題は、6,500 万件を超えるレコードを反復処理したくないということです。個別の値を取得できれば、たとえば 6,500 万件ではなく、500 万件のレコードを処理するだけで済みます。データの説明については以下を参照し、サンプルについてはSQL Fiddleを参照してください。

invoice_numberクライアントがリンク先をpassport_number_1, national_identity_number_1 and driving_license_1毎月送信するとしたら、これが表示される行は 1 つだけ必要です。つまり、4 つのフィールドは一意である必要があります

上記を 30 か月間送信すると、31 か月目にinvoice_numberリンク先が送信されます。フィールドが新しいため、行全体が一意であるためpassport_number_1, national_identity_number_2 and driving_license_1、この行も選択したいと思います。national_identity

  • linked toつまり、それらは同じ行に表示されます
  • すべてのフィールドで、ある時点で Null が発生する可能性があります。
  • 「ピボット/複合」列は、invoice_number と submit_by です。それらのいずれかが存在しない場合は、その行を削除します
  • また、上記のデータに database_id を含める必要があります。つまり、postgresql データベースによって自動生成される primary_id
  • 返す必要のない唯一のフィールドはother_column andyet_another_columnです。テーブルには 140 列あるので必要ないことに注意してください
  • 結果を使用して、この一意のレコードを保持する新しいテーブルを作成します

シナリオを再現する試みについては、このSQL フィドルを参照してください。

そのフィドルから、次のような結果が期待されます。

  • 行 1、2、および行 11: まったく同じであるため、1 つだけを保持する必要があります。できれば最小の行id
  • 行 4 と行 9: まったく同じなので、そのうちの 1 つが削除されます。
  • 行 5、7、および 8: invoice_numberまたはが欠落しているため、削除されsubmitted_byます。
  • 結果は行 (1、2、または 11)、3、(4、または 9)、6、および 10 になります。
0 投票する
2 に答える
45 参照

sql - 複数の列の異なるpostrgesでid descでソート

impressionable_id と impressionable_type の順序で ID の降順で一意であるすべての最後のインプレッションをテーブルから選択し、最後の 10 件を取得したいと思います。

これをさらに説明するには

理想的にはこれが欲しい

私はdistinctとgroup byを試しましたが、私のSQL知識はせいぜい公平です。

私は得る

誰か光を当ててくれませんか

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

vba - アクセス - フィールド値に基づいて Distinct を選択

マイコード

Access クエリがあります。

クエリの基本概念... 個々のマイルストーンのステータス ( LIST_RequestBurndown_Q.MilestoneStatus) に基づいて、RequestID の全体的なステータスを決定します ( [Request-Priority, ALL_Q].RequestID)。

私の問題

一部の RequestID では、複数のステータスにマイルストーンが存在します。たとえば、次のような結果が得られる場合があります。

私がやりたいのは、RequestStatus表示される「優先順位付け」で、 ごとに 1 つのレコードしかありませんRequestID

ORDER BYWHERE、を使用してこれを行う方法を考えようとしてきましたがDISTINCT ON、可能性のあるステータスオプションと関連する優先度のテーブルを作成して使用することもできますMAXが、この時点ではこれを考えすぎています。どんな助けでも大歓迎です!