首页 >数据库 >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 的所有组合的最新响应。

假设:

  • 对于每个日期,可以有一个响应给定的方法/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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn