問題タブ [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 - "DISTINCT ON" を Arel / ActiveRecord と組み合わせて使用するには?
私はMessage
ActiveRecord モデルを持っており、異なる を持つすべてのメッセージを選択したいと考えていますconversation_partner_id
。DISTINCT ON
現在、句を文字列として指定していますが、Arel
代わりに式として提供できるかどうか、および利点があるかどうか疑問に思っていました。私の声明は次のようになります。
wheret
はmessages
テーブルの和集合であり、やや複雑なArel
式として指定されます。問題とは無関係であり、問題なく機能するため、SELECT
省略します。
次のコードは機能しません。
DISTINCT ON ()
句の後にコンマを配置すると、不正な形式の SQL になります。
sql - POSTGRES 最小値/最小値
2 つの列を持つ postgres 9.3 テーブルがあります。最初の列には時刻があり、2 番目の列にはルートがあります。ルートは複数回ある場合があります。すべてのルートを最短時間で一覧表示したいと考えています。私のテーブル:
私が出力したいもの:
どんな助けでも感謝します、そして前もって感謝します。
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 つ以上ある場合はすべて異なります。
ruby-on-rails - Rails 4.2.5で個別の選択が正しく機能しない
私はこの2つのモデルを持っています:
ご覧のとおり、Post モデルに全文検索を実装しようとしています。TSVECTOR 列とそれを更新するトリガーを作成しましたが、search_tsv
スコープのみを使用する場合、すべてが魅力のように機能します。
しかし、検索結果からの投稿ごとに、最後に追加されたコメントを取得したいと考えています。そのために、full_search
スコープを構築しました。
このスコープを使用しようとすると、生成される SQL クエリは次のようになります。
これは私にとっては問題ありません。しかし、検索コントローラーでこのスコープを使用しようとすると、結果が奇妙になります...
次の SQL クエリが生成されます。
結果は空の配列です:(。
私は自分が何を間違っているのか理解できませんでした[明らかに私はここで何かばかげたことをしています:(]。
これを修正するのを手伝ってもらえますか?
sql - 2 つの結合を含む CTE での奇妙な動作
この投稿は、質問をより理解しやすくするために完全に言い換えられています。
PostgreSQL 9.5
で実行中の設定Ubuntu Server 14.04 LTS
。
データ・モデル
データを個別に (時系列で) 保存するデータセット テーブルがあります。これらのテーブルはすべて同じ構造を共有する必要があります。
この定義は に由来するため、データセット名FUNCTION
を表します。%s
このUNIQUE
制約により、特定のデータセット内に重複するレコードがあってはならないことが保証されます。このデータセットのレコードはfloatvalue
、特定のチャネル ( ) の値 ( ) であり、特定の間隔 ( ) で特定の時間 ( ) に特定の品質 ( )channelid
でサンプリングされます。値が何であれ、 の重複はありません。timevalue
granulityid
qualitycodeid
(channelid, timevalue, granulityid, qualitycodeid)
データセット内のレコードは次のようになります。
また、チャンネルの有効数字を格納する別のサテライト テーブルもあります。このパラメーターは時間とともに変化する可能性があります。私は以下の方法で保管しています。
チャネルに有効数字が定義されている場合、このテーブルに行が追加されます。次に、この日付以降に係数が適用されます。最初のレコードには常にセンチネル値'-infinity'::TIMESTAMP
があります。これは、係数が最初から適用されることを意味します。次の行には、実際に定義された値が必要です。特定のチャネルに行がない場合は、有効桁数がユニタリであることを意味します。
このテーブルのレコードは次のようになります。
ゴール
私の目標は、異なるプロセスによって入力された 2 つのデータセットの比較監査を実行することです。それを達成するには、次のことを行う必要があります。
- データセット間のレコードを比較し、それらの違いを評価します。
- 類似レコード間の差異が有効桁数内に収まっているかどうかを確認します。
この目的のために、理解できない方法で動作する次のクエリを作成しました。
クエリは多少読みにくいかもしれませんが、おおよそ次のようになると思います。
- 一意性制約を使用して 2 つのデータセットのデータを結合し、同様のレコードを比較して差を計算します (
S0
)。 LEFT JOIN
それぞれの違いについて、現在のタイムスタンプ ( ) に適用される有効数字 ( ) を見つけますS1
。- その他の有用な統計 (
S2
および最終SELECT
) を実行します。
問題
上記のクエリを実行すると、行が欠落しています。例:channelid=123
では、両方のテーブル (および)granulityid=4
で共通の 12 のレコードがあります。クエリ全体を実行して に保存すると、12 行未満になります。次に、レコードが欠落している理由を理解するために調査を開始し、句で奇妙な動作に直面しました。このクエリを実行すると、次のようになります。datastore.rtu
datastore.audit0
MATERIALIZED VIEW
WHERE
EXPLAIN ANALIZE
そして、代わりに67106行が必要であることを知っています。
執筆時点でS0
は、正しい行数が返されることがわかっています。したがって、問題はさらにあるはずCTE
です。
私が本当に奇妙だと思うのは、次のことです。
10 行を返します。
そして次のものは正しい行数を返します:
どこ:
したがって、問題は にあるようS1
です。には有効数字が定義されてchannelid = 123
いないため、これらのレコードはLEFT JOIN
. しかし、これは、一部が欠落している理由を説明していません。
質問
- このクエリで何が間違っていますか?
有効数字をフェッチするときに正しいカーディナリティを維持するために使用LEFT JOIN
するため、レコードを削除してはなりません。その後は単なる算術です。
- 事前フィルタリングは、事後フィルタリングよりも多くの行を返すことができますか?
これは私には少しバグがあるように聞こえます。節を使用しない場合WHERE
、すべてのレコード (または組み合わせ) が生成され (それが節であることJOIN
はわかっていWHERE
ます)、計算が行われます。WHERE
追加(元のクエリ) を使用しないと、行が欠落します (例で示したように)。フィルターに WHERE 句を追加すると、結果が異なります (事後フィルター処理が事前フィルター処理よりも多くのレコードを返した場合は、これで問題ない可能性があります)。
私の間違いやクエリの誤解を指摘する建設的な回答は大歓迎です。ありがとうございました。
distinct-on - 明確な 1 列のみ
特定のカテゴリごとに通話時間の合計を返すクエリを作成しようとしています。カテゴリは 3 つしかなく、時間の合計で 3 行だけが返されるようにします。個別を使用するとうまくいくと思いましたが、議事録にも当てはまります。
このクエリを操作して、カテゴリでのみ区別するにはどうすればよいですか?
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 になります。
sql - 複数の列の異なるpostrgesでid descでソート
impressionable_id と impressionable_type の順序で ID の降順で一意であるすべての最後のインプレッションをテーブルから選択し、最後の 10 件を取得したいと思います。
これをさらに説明するには
理想的にはこれが欲しい
私はdistinctとgroup byを試しましたが、私のSQL知識はせいぜい公平です。
私は得る
誰か光を当ててくれませんか
vba - アクセス - フィールド値に基づいて Distinct を選択
マイコード
Access クエリがあります。
クエリの基本概念... 個々のマイルストーンのステータス ( LIST_RequestBurndown_Q.MilestoneStatus
) に基づいて、RequestID の全体的なステータスを決定します ( [Request-Priority, ALL_Q].RequestID
)。
私の問題
一部の RequestID では、複数のステータスにマイルストーンが存在します。たとえば、次のような結果が得られる場合があります。
私がやりたいのは、RequestStatus
表示される「優先順位付け」で、 ごとに 1 つのレコードしかありませんRequestID
。
ORDER BY
、WHERE
、を使用してこれを行う方法を考えようとしてきましたがDISTINCT ON
、可能性のあるステータスオプションと関連する優先度のテーブルを作成して使用することもできますMAX
が、この時点ではこれを考えすぎています。どんな助けでも大歓迎です!