首页 >数据库 >mysql教程 >如何高效地检索 PostgreSQL 中每个 ID 的最新行?

如何高效地检索 PostgreSQL 中每个 ID 的最新行?

DDD
DDD原创
2025-01-02 19:40:39453浏览

How to Efficiently Retrieve the Most Recent Row for Each ID in PostgreSQL?

检索 PostgreSQL 中每个 ID 的最后一行

考虑一个包含 ID、日期和其他信息列的数据集:

id    date          another_info
1     2014-02-01         kjkj
1     2014-03-11         ajskj
1     2014-05-13         kgfd
2     2014-02-01         SADA
3     2014-02-01         sfdg
3     2014-06-12         fdsA

我们的目标是检索每个不同 ID 的最新行。

利用 Distinct On运算符

PostgreSQL 中最有效的方法是使用 DISTINCT ON 运算符:

SELECT DISTINCT ON (id) id, date, another_info
FROM the_table
ORDER BY id, date DESC;

此查询仅标识并返回每个唯一 ID 的第一个不同行,按降序排序日期列。

使用窗口函数

对于跨数据库解决方案,我们可以利用窗口函数:

SELECT id, date, another_info
FROM (
  SELECT id, date, another_info, 
  ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC) AS rn
  FROM the_table
) t
WHERE rn = 1
ORDER BY id;

此查询创建一个窗口函数来计算每个 ID 的行号,按日期降序排列。 WHERE rn = 1 条件过滤行以仅包含每个 ID 排名最高的行,最后的 ORDER BY 子句确保结果按 ID 排序。

以上是如何高效地检索 PostgreSQL 中每个 ID 的最新行?的详细内容。更多信息请关注PHP中文网其他相关文章!

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