问题:
MySQL 表存储对各种 RPC 的响应带有时间戳、方法、ID 和响应字段的调用。目标是检索方法和 ID 的所有组合的最新响应。
假设:
解决方案:
以下查询可用于高效检索所需结果:利用 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中文网其他相关文章!