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

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

Susan Sarandon
发布: 2024-12-28 17:09:11
原创
390 人浏览过

How to Efficiently Retrieve the Last 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    date          another_info
1     2014-05-13         kgfd
2     2014-02-01         SADA
3     2014-06-12         fdsA
登录后复制

解决方案:

有两种有效的方法可以实现PostgreSQL 中的这个:

方法 1:使用DISTINCT ON 运算符

Postgres 提供了 DISTINCT ON 运算符,它使您能够根据一列或多列选择不同的行,然后应用其他操作。对于这种场景,您可以使用:

SELECT DISTINCT ON (id) id, date, another_info
FROM the_table
ORDER BY id, date DESC;
登录后复制

方法 2:使用窗口函数

窗口函数允许您对一组行执行聚合或计算可以动态定义。您可以使用名为 ROW_NUMBER() 的窗口函数为每个 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;
登录后复制

使用窗口函数的解决方案通常比使用更快子查询。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板