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

Oracle中如何按产品分组筛选对应最大purchase_id的记录?

需求:筛选每个产品对应最大purchase_id的记录

原始表结构与数据

表名:purchase_details

purchase_idproduct_idpurchase_pricesale_price
311500016000
411300014000
34500700
24400500

预期结果

purchase_idproduct_idpurchase_pricesale_price
411300014000
34500700

方法1:窗口函数(推荐,适配MySQL 8+、PostgreSQL、SQL Server等)

利用ROW_NUMBER()按产品分组,对采购ID降序排序,取每组第一条记录:

SELECT purchase_id, product_id, purchase_price, sale_price
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY purchase_id DESC) AS rn
    FROM purchase_details
) t
WHERE rn = 1;

方法2:子查询关联(兼容低版本数据库)

先分组获取每个产品的最大采购ID,再关联原表提取完整记录:

SELECT pd.*
FROM purchase_details pd
JOIN (
    SELECT product_id, MAX(purchase_id) AS max_purchase_id
    FROM purchase_details
    GROUP BY product_id
) t ON pd.product_id = t.product_id AND pd.purchase_id = t.max_purchase_id;

方法3:NOT EXISTS 语句

通过判断当前记录的采购ID是对应产品的最大值来筛选:

SELECT pd1.*
FROM purchase_details pd1
WHERE NOT EXISTS (
    SELECT 1
    FROM purchase_details pd2
    WHERE pd2.product_id = pd1.product_id AND pd2.purchase_id > pd1.purchase_id
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:25:19