結合されたステートメント内の最新の日付の選択: 歴史的場所データ取得のトラブルシューティング
このクエリは、レコードの過去の場所とデータを取得することを目的としています。対応する日付。ただし、現在の実装では実行に非常に長い時間がかかり、重複レコードが生成されます。予期される出力は、最新の場所を含むレコードの簡略化されたリストです。
元のクエリは、自己結合操作を実行して、各レコード 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 サイトの他の関連記事を参照してください。