在处理数据时,通常需要从各种数据集中提取特定信息。对于 PostgreSQL,用户可能会遇到需要获取每个唯一 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 的最后一行数据表:
id | date | another_info |
---|---|---|
1 | 2014-05-13 | kgfd |
2 | 2014-02-01 | SADA |
3 | 2014-06-12 | fdsA |
Postgres 的 DISTINCT ON 运算符可以有效地处理这种情况:
select distinct on (id) id, date, another_info from the_table order by id, date desc;
为了跨数据库兼容性,窗口函数如row_number() 可以使用:
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中文网其他相关文章!