You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL查询:获取最新记录姓名为John的ID

PostgreSQL 查询每个id最新记录中name为'John'的条目

需求说明

从包含id、name、date字段的表中,找出**每个id对应的最新记录(按date字段降序)里,name为'John'**的所有条目。

示例数据

idnamedate
1'John''2020-01-01'
1'Steve''2025-01-01'
2'John''2021-01-01'
2'Steve''2020-01-01'
3'John''2022-01-01'
3'Steve''2020-01-01'
4'John''2020-01-01'
4'Steve''2022-01-01'

期望结果

idnamedate
2'John''2021-01-01'
3'John''2022-01-01'

解决方案

方法1:使用窗口函数(通用型,支持多数数据库)

用ROW_NUMBER()窗口函数给每个id分组内的记录按日期排序,标记出最新的那条,再筛选符合条件的记录:

WITH ranked_records AS (
    SELECT 
        id,
        name,
        date,
        -- 按id分组,组内按date降序排序,最新记录序号为1
        ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC) AS record_rank
    FROM your_table_name -- 替换为你的表名
)
SELECT id, name, date
FROM ranked_records
WHERE record_rank = 1 AND name = 'John';

方法2:使用PostgreSQL专属的DISTINCT ON(更简洁)

PostgreSQL提供的DISTINCT ON语法可以直接获取每个分组的第一条记录,配合排序就能拿到每个id的最新记录,再筛选name条件:

SELECT id, name, date
FROM (
    -- 按id分组,取每个id的最新记录
    SELECT DISTINCT ON (id) id, name, date
    FROM your_table_name -- 替换为你的表名
    ORDER BY id, date DESC
) AS latest_per_id
WHERE name = 'John';

说明

  • 两种方法都能精准定位到每个id的最新记录,再筛选出name为'John'的条目
  • 窗口函数写法更通用,适合需要兼容其他数据库的场景;DISTINCT ON是PostgreSQL特有的语法,代码更简洁

内容的提问来源于stack exchange,提问作者NoobSailboat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 23:15:29