問題タブ [groupwise-maximum]
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.
subquery - CakePHP 2.1のFacebookのような会話リスト(グループごとの最大値、サブクエリ、結合に関連)
私は次のMySQLテーブルを持っています:
注:会話テーブルでは、user1_idはuser2_id以下です。
ユーザーXの会話のリストを取得したいのですが、各会話は、その会話でユーザーXによって削除されていない最後のメッセージによって表示され、結果をページ分割します。(Facebookメッセージと同じように。最後のメッセージがXまたは他のユーザーによって送信された場合でも、表示メッセージとして表示されます。
次のサブクエリを作成するのに役立つグループごとの最大のソリューションを思いつきました。
このサブクエリを$this->Paginator-> settings配列の結合テーブルとして使用できますか?答えが「はい」の場合、次のようなクエリが生成されます。
この最後のクエリは、必要な結果を返します。しかし、PaginatorComponentで適切なオプションを設定する方法を見つけることができませんでした。この種のクエリには、公式のドキュメントでは不十分です。では、この状況で検索条件、結合、サブクエリなどをどのように構成できますか?
mysql - MySQLは重複せずに参加します
顧客テーブルと注文テーブルがあります。各顧客は多くの注文をすることができます。
注文テーブルからすべての顧客とその最初の注文番号を選択したいと思います(注文だけでなく、最も早い注文番号を選択することが重要です)。注文の有無にかかわらず顧客をリストしたいのですが、複数の注文がある場合は2回顧客を含めたくありません。
私はこれを使用しています:
これにより、テーブルから好きな注文IDを選択することを除いて、ほぼ私が望むものが得られます。並べ替えて、最小の注文IDを選択できるようにする必要があります。
何かアイデアはありますか?
私の顔をじっと見つめているものだと確信しています...
編集:要求に応じてテーブルの構造
顧客:
/li>注文:
/li>
mysql - フィールドの長さによるMySQLのグループごとの最大値
Product
テーブル:
info
名前でグループ化されたすべての製品のリストを取得する必要があります。同じ名前の製品がある場合は、フィールドのデータが最も多い製品を選択して表示する必要があります。もう1つの要件は一貫性です。同じ製品が毎回表示されることが保証されている必要があります。しかし、これに関しては、パフォーマンスはまったく問題ではありません。
だから私がこれまでに思いついた最高のものはこれです:
これはMySQLで機能するはずですが、結果を保証するものではないという私の理解。
より良い方法はありますか?
アップデート:
私が探しているものの例。データが
期待される結果は次のいずれかになります。
また
クエリを実行するたびに同じ結果になる限り、2つのうちどちらを使用してもかまいません。
mysql - 100 万行のテーブルでの MySQL グループごとの最大パフォーマンスの問題
膨大な数の投稿があり、mysql がメモリ内でテーブルの並べ替えを実行できなくなり、インデックスを十分に活用していないように見える非常に活発なフォーラムのパフォーマンスを改善する簡単な方法を見つけようとしています。
この単純なクエリは、各トピックの最新の投稿を見つけて、ユーザーがそれ以降に返信があるかどうかを判断します (後で topic_time を比較することにより)。
シンプルでフラットなテーブルは次のようになります
ただし、100 万件の投稿があり、ユーザー自身が数万件の投稿を行うと、パフォーマンスが低下します。MySQL がメモリ内のテーブルをソートできなくなったか、スキャンする行が多すぎます。実際の使用では最大 3 秒かかることがあります。これは、その間に CPU が急上昇し、他のすべての人の速度が低下するため、容認できないものです。
もちろん、インデックスの任意の組み合わせを作成できますが、mysql は主に次の組み合わせを使用するのが好きなようです
したがって、100 万件の投稿の中から 1 人のユーザーの 5 万件の投稿を選択し、topic_id によるグループ化と並べ替えを開始します。奇妙なことに、インデックス ミックスに topic_id を追加しても、パフォーマンスは向上しないようですが、インデックス フィールドの順序である可能性があります。
代わりに同等の JOIN を作成して、複数のインデックスを使用できるようにしようとしましたが、post_status と poster によって各側をフィルター処理する必要があるという問題に遭遇しました。
少なくとも最初の数ページについては、mysql が最初に post_time のインデックスを介してデータを並べ替えてから、ユーザーの個別の topic_id を降順で選択し始めることができれば、より高速になると考えていました。それにはサブクエリが必要だと思いますが、50kの結果サブクエリがより良いかどうかはわかりませんが、それでも一時テーブルが必要です。
もちろん、基本的な解決策は、各トピックの各ユーザーの最大 post_time を格納する別のテーブルが存在するようにコア設計を拡張することですが、他の解決策が見つからない場合を除き、これはあまりにも大きな変更です。
ご提案ありがとうございます。
実際の例と EXPLAIN を追加:
遅いログ
説明
ruby-on-rails-3 - 各サブセットの値が最も高いレコードを選択する
すべてではありませんが一部のレコードに「パス」フィールドがあり、すべてに「値」フィールドがあります。パスを持たないレコード、または特定のパスを持つすべてのレコードの中で最大の値を持つレコードのみを選択したいと考えています。
つまり、次のレコードが与えられます。
B、C、D、および E を返したいのですが、A は返しません (A にはパスがあり、そのパスは B と同じですが、A の値の方が小さいため)。
ActiveRecord、ARel、および Postgres を使用してこれを達成するにはどうすればよいですか? 理想的には、スコープとして機能するソリューションが欲しいです。
mysql - MYSQLインラインビュークエリ(トップカスタマー)
私はクエリを作成して、1か月(開始から現在まで毎月)のトップ顧客を確認できるようにしています。
今、私はテーブルを持っています:
注文(、、、、、、)orderID
_ orderdate
_ customerID
_ Netamount
_tax
totalamount
オーダーライン(、、、、、)orderlineID
_ orderID
_prodID
quantity
orderdate
顧客(firstname
lastname
zip
creditcardtype
など)
他のテーブルは必ずしもここにあるとは限らないと思います。
もちろん、一度も購入したことがないお客様もいれば、すでに何度も購入したお客様もいます。
今、私はこのクエリを使用しました:
これで、すでにsthを購入したすべての顧客が表示されます。彼らが支払った合計金額で。
クエリで
各行にYea
r Month
Total order
(その月に配置)が表示されるテーブルが表示されます。
それでも、1か月のトップ顧客に会いたいだけです。
私はインターネットでたくさん検索しましたが、それでも私が欲しいものを見つけることができませんでした(たぶん私は間違ってググっただけです)。少なくとも1つのインラインビューが必要であることはわかっていますが、それを実現する方法がまだわかりません。
誰かがここで私を助けてくれることを願っています。
mysql - LEFTJOINは最初の行のみ
左結合の最初の行のみを取得することについて多くのスレッドを読みましたが、何らかの理由で、これは私には機能しません。
これが私の構造です(もちろん簡略化されています)
フィード
アーティスト
feeds_artists
今、私は記事を入手して最初のアーティストだけに参加したいと思っています、そして私はこのようなことを考えました:
feeds_artistsの最初の行のみを取得するだけですが、これはすでに機能しません。
TOP
データベースが原因で使用できずfeeds_artists.artist_id
、日付で並べ替える必要があるため、結果をグループ化できません(この方法でグループ化して結果を取得しましたが、結果は最新ではありません)
OUTERAPPLYでも何かを試しましたが成功しませんでした。正直なところ、私はそれらの行で何が起こっているのか本当に想像できません-おそらくこれを機能させることができない最大の理由です。
解決:
mysql - SQL クエリで 2 つの MAX 呼び出しを安全に使用できますか
数十万のエントリを持つテーブルがあり、クエリを使用して特定の receiver_id の結果セットを取得し、sender_id でグループ化しようとしています。現在の SQL クエリは機能しますが、ステートメントで 2 つの MAX 呼び出しを使用すると問題が発生する可能性があるかどうかを知りたいです。次のようになります。
テーブルの日付は次のようになります。
私のクエリからの出力は次のとおりです。
MAX 呼び出しを使用したこのクエリに問題はありますか? もしそうなら、代替手段は何ですか?
mysql - 10 件の最新投稿を取得する
単純なフォーラムの最新のトピックを取得するための SQL クエリを準備し、次の準備をしています。
最新のコメントを考慮して、最新の投稿を取得するクエリを作成するにはどうすればよいですか?
これにより、最新のコメントが表示されます
それと最後の投稿で、
これら 2 つのクエリを結合し、それらを 10 個の最新の id_post (日付) でグループ化する必要があります ...
誰か手を貸して?ありがとう、そしてご挨拶