ホームページ > データベース > mysql チュートリアル > SQL を使用して、指定されたレコード ID の最新の歴史的位置を効率的に取得するにはどうすればよいですか?

SQL を使用して、指定されたレコード ID の最新の歴史的位置を効率的に取得するにはどうすればよいですか?

DDD
リリース: 2024-12-07 04:46:12
オリジナル
593 人が閲覧しました

How to Efficiently Retrieve the Most Recent Historic Location for a Given Record ID Using SQL?

結合ステートメント内の 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート