MySQL テーブルから最新の日付付きレコードを取得する方法
時間に依存するデータを MySQL テーブルに保存する場合、多くの場合、次のことが必要になります。フィールドの特定の組み合わせについて最新のレコードを取得します。次の例は、タイムスタンプ、メソッド、ID などのフィールドを備えた RPC 応答のテーブルを処理するときにこれを実現する方法を示しています。
Question
という名前のテーブルについて考えます。次の構造を持つ rpc_responses:
CREATE TABLE rpc_responses ( timestamp DATE, method VARCHAR, id VARCHAR, response MEDIUMTEXT, PRIMARY KEY (timestamp, method, id) );
次の場合データ:
timestamp | method | id | response |
---|---|---|---|
2009-01-10 | getThud | 16 | "....." |
2009-01-10 | getFoo | 12 | "....." |
2009-01-10 | getBar | 12 | "....." |
2009-01-11 | getFoo | 12 | "....." |
2009-01-11 | getBar | 16 | "....." |
望ましい結果
メソッドと ID の既存のすべての組み合わせに対する最新の応答のリストを取得します:
timestamp | method | id | response |
---|---|---|---|
2009-01-10 | getThud | 16 | "....." |
2009-01-10 | getBar | 12 | "....." |
2009-01-11 | getFoo | 12 | "....." |
2009-01-11 | getBar | 16 | "....." |
回答
これを達成するには、次のクエリを利用します:
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;
このクエリは、結合を必要とせずに、目的の結果を効率的に取得します。また、必要な行構造も維持し、メソッドと ID の一意の組み合わせごとに個別のレコードを提供します。
以上がMySQL でメソッドと ID の組み合わせごとに最新のレコードを選択する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。