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

如何用SQL查询获取最新订购商品并剔除重复记录

问题描述

现有商品订购记录数据,示例中BOOK和PEN各有两条不同日期的订购记录,需编写SQL查询,仅保留每个商品最新的订购记录,去除重复的商品条目。

原始数据示例:

IDPRODUCTORDER_DATE
1BOOK2023-10-01
2PEN2023-10-01
3BOOK2023-10-02
4PEN2023-10-03

预期结果:

IDPRODUCTORDER_DATE
3BOOK2023-10-02
4PEN2023-10-03
解决方案

方法1:窗口函数法(推荐,适配多数现代数据库)

利用ROW_NUMBER()窗口函数按商品分组,按订购日期倒序排序,筛选每组的第一条(最新)记录:

SELECT ID, PRODUCT, ORDER_DATE
FROM (
    SELECT 
        ID, 
        PRODUCT, 
        ORDER_DATE,
        ROW_NUMBER() OVER (PARTITION BY PRODUCT ORDER BY ORDER_DATE DESC) AS rn
    FROM your_table_name
) t
WHERE rn = 1;
  • 注:若同一商品存在多条相同最新日期的记录,ROW_NUMBER()会随机保留一条;若需保留所有同日期的最新记录,可替换为RANK()或DENSE_RANK()。

方法2:分组关联法

先获取每个商品的最新订购日期,再关联原表提取对应记录:

SELECT t1.ID, t1.PRODUCT, t1.ORDER_DATE
FROM your_table_name t1
JOIN (
    SELECT PRODUCT, MAX(ORDER_DATE) AS latest_date
    FROM your_table_name
    GROUP BY PRODUCT
) t2 ON t1.PRODUCT = t2.PRODUCT AND t1.ORDER_DATE = t2.latest_date;
  • 注:该方法会返回同一商品同一最新日期的所有记录,若需仅保留一条,可搭配DISTINCT或额外排序条件。

方法3:NOT EXISTS子查询法

筛选出不存在同一商品、订购日期更晚的记录:

SELECT ID, PRODUCT, ORDER_DATE
FROM your_table_name t1
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table_name t2
    WHERE t2.PRODUCT = t1.PRODUCT AND t2.ORDER_DATE > t1.ORDER_DATE
);
  • 注:此方法同样会保留同一商品同一最新日期的所有记录,适合无需处理同日期多条记录的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:05:34