考虑一个包含 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 的最新行。
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中文网其他相关文章!