问题:
给定以下数据,您想要提取每个唯一的最后一条记录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中文网其他相关文章!