ホームページ >データベース >mysql チュートリアル >MySQL と PostgreSQL で各メソッドと ID の最新のレコードを効率的に取得するにはどうすればよいですか?

MySQL と PostgreSQL で各メソッドと ID の最新のレコードを効率的に取得するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-21 17:33:11247ブラウズ

How to Efficiently Retrieve the Most Recent Records for Each Method and ID in MySQL and PostgreSQL?

MySQL テーブルから最新のレコードを取得する

問題:

MySQL テーブルにはさまざまな RPC への応答が保存されますタイムスタンプ、メソッド、ID、および応答のフィールドを含む呼び出し。目標は、メソッドと ID のすべての組み合わせに対する最新の応答を取得することです。

前提:

  • 日付ごとに、次の応答が 1 つ存在する可能性があります。指定されたメソッド/ID。
  • すべての呼び出しの組み合わせが指定されたメソッドに存在するとは限りません。
  • 多数のメソッド、数千の ID、少なくとも 365 の異なる日付があります。

解決策:

次のクエリMySQL 変数を利用して目的の結果を効率的に取得するために使用できます。 JOIN:

SELECT * FROM (
    SELECT *, if(@last_method=method,0,1) as new_method_group, @last_method:=method 
    FROM rpc_responses 
    ORDER BY method, timestamp DESC
) as t1
WHERE new_method_group=1;

このクエリはまず、新しいメソッド グループの開始を示す new_method_group 値を各行に割り当てます。次に、new_method_group 値が 1 の行のみを含むように結果をフィルタリングし、各メソッドの最新の行のみが最終結果に含まれるようにします。

PostgreSQL の代替ソリューション:

PostgreSQL は、このタスク用の組み込み機能を提供します:

SELECT DISTINCT ON (method) timestamp, method, id, response
FROM rpc_responses
WHERE 1 # some where clause here
ORDER BY method, timestamp DESC

以上がMySQL と PostgreSQL で各メソッドと ID の最新のレコードを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。