結合ステートメント内の MAX Date を使用した歴史的場所の取得
特定のレコード ID の過去の場所を取得するときに、パフォーマンスの問題が発生し、結果内の重複エントリ。ユーザーは複数のテーブルを結合し、received_id でフィルタリングすることでこの問題に対処しようとしましたが、期待した出力は得られませんでした。
これを解決するには、クエリを次のように変更することをお勧めします:
SELECT t1.received_id , t1.transaction_id , t1.date_modified , l.location FROM transactions t1 JOIN ( SELECT received_id, MAX(date_modified) maxmodify FROM transactions GROUP BY received_id) max_record ON max_record.received_id = t1.received_id AND max_record.maxmodify = t1.date_modified JOIN locations l ON l.location_id = t1.location_id JOIN received r ON r.received_id = t1.received_id WHERE t1.received_id = '1782' ORDER BY t1.date_modified DESC
キーの変更には、トランザクション テーブルの結合が 2 回含まれます。1 回目はメイン クエリで、もう 1 回はサブクエリ内で、各受信 ID の最大の date_modified 値を見つけます。次に、このサブクエリを使用してメイン クエリをフィルタリングし、最新の date_modified 値を持つ行のみを返します。
この手法の中核は、次の一般的なパターンでカプセル化されています。
SELECT x.* FROM my_table x JOIN (SELECT id,MAX(thing) max_thing FROM my_table GROUP BY id) y ON y.id = x.id AND y.max_thing = x.thing;
これこのアプローチは重複エントリを効果的に排除し、各レコード ID と場所の最新変更時刻のみを表示するという望ましい結果を提供します。
以上がSQL を使用して、指定されたレコード ID の最新の歴史的位置を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。