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

PostgreSQL如何按integration_id分组取name为approved的最小日期行

PostgreSQL按分组取组内时间最小的完整行查询方案

假设你的数据表名为integration_records,实际使用时可替换为你的真实表名,以下两种方案均可实现需求:


方法1:使用PostgreSQL专属DISTINCT ON(推荐)

这是PostgreSQL特有的语法,写法简洁,索引合理的情况下性能优于通用SQL方案:

SELECT DISTINCT ON (integration_id) 
    id, integration_id, date, name
FROM integration_records
WHERE name = 'approved'
ORDER BY integration_id, date ASC;

逻辑说明:DISTINCT ON会保留每个integration_id分组下的第一条数据,ORDER BY中先按分组字段排序,再按date升序排列,就能自动取到每个分组下date最小的完整行。如果存在同分组同最小date的多条数据,可在ORDER BY后追加排序规则(如id ASC)保证结果确定性。


方法2:使用标准SQL窗口函数(兼容性强)

如果需要兼容其他SQL数据库,可以用ROW_NUMBER窗口函数实现:

WITH ranked_records AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY integration_id ORDER BY date ASC) AS rank_num
    FROM integration_records
    WHERE name = 'approved'
)
SELECT id, integration_id, date, name
FROM ranked_records
WHERE rank_num = 1;

逻辑说明:先给每个integration_id分组下的行按date升序排名,排名为1的就是每组date最小的行,筛选排名为1的行即可得到目标结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:06:02