ホームページ > データベース > mysql チュートリアル > 結合されたステートメント内の各レコードの最新の位置データを効率的に取得するにはどうすればよいですか?

結合されたステートメント内の各レコードの最新の位置データを効率的に取得するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-08 02:37:10
オリジナル
806 人が閲覧しました

How to Efficiently Retrieve the Most Recent Location Data for Each Record in a Joined Statement?

結合されたステートメント内の最新の日付の選択: 歴史的場所データ取得のトラブルシューティング

このクエリは、レコードの過去の場所とデータを取得することを目的としています。対応する日付。ただし、現在の実装では実行に非常に長い時間がかかり、重複レコードが生成されます。予期される出力は、最新の場所を含むレコードの簡略化されたリストです。

元のクエリは、自己結合操作を実行して、各レコード ID に関連付けられた最新の日付を検索しようとします。ただし、このアプローチは非効率的であり、特に大規模なデータセットの場合、パフォーマンスの問題が発生する可能性があります。

正しいクエリ

クエリを最適化するには、次の修正されたクエリを利用できます。 version:

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
ログイン後にコピー

説明

このクエリでは、トランザクション テーブル内の各レコード ID の最大日付を見つけるために共通テーブル式 (CTE) を導入します。 。 CTE は次のとおりです。

SELECT received_id, MAX(date_modified) AS maxmodify
FROM transactions
GROUP BY received_id
ログイン後にコピー

次に、元のトランザクション テーブル (t1) を、received_id フィールドのこの CTE (max_record) と結合します。さらに、maxmodify 列でフィルタリングして、最新の日付を持つトランザクションのみが含まれるようにします。これにより、不必要な結合や重複を回避してクエリが最適化されます。

この最適化されたクエリを使用すると、各レコードの過去の位置を効果的に取得でき、一意のレコード ID ごとに最新の位置のみを取得できます。

以上が結合されたステートメント内の各レコードの最新の位置データを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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