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

如何对订单表同用户同日期重复行去重并保留最新时间戳记录

订单去重实现方案

你的去重需求属于数据清洗的典型场景,核心规则是**同一用户(Email)+ 同一下单日期(精确到天)+ 相同订单金额(TotalAmount)**的组合作为重复判定组,每组保留最新生成的一笔订单即可,以下是两种常用场景的实现方案:

方案1:SQL实现(数据库侧直接处理)

支持MySQL 8.0+/PostgreSQL/Oracle/Spark SQL等所有支持窗口函数的主流数据库,代码最简:

WITH order_ranked AS (
    SELECT 
        Email,
        OrderID,
        Order_date,
        TotalAmount,
        -- 按去重维度分组,组内按订单时间倒序、订单ID倒序排序
        ROW_NUMBER() OVER (
            PARTITION BY Email, DATE(Order_date), TotalAmount 
            ORDER BY Order_date DESC, OrderID DESC
        ) AS rn
    FROM 你的订单表名
)
-- 取每组排名第一的即为最新有效订单
SELECT Email, OrderID, Order_date, TotalAmount
FROM order_ranked
WHERE rn = 1;

如果是不支持窗口函数的MySQL 5.x版本,可使用GROUP BY关联方案:

SELECT t1.*
FROM 你的订单表名 t1
INNER JOIN (
    SELECT 
        Email, 
        DATE(Order_date) order_day, 
        TotalAmount, 
        MAX(Order_date) max_order_date,
        MAX(OrderID) max_order_id
    FROM 你的订单表名
    GROUP BY Email, DATE(Order_date), TotalAmount
) t2 
ON t1.Email = t2.Email 
AND DATE(t1.Order_date) = t2.order_day 
AND t1.TotalAmount = t2.TotalAmount 
AND t1.Order_date = t2.max_order_date
AND t1.OrderID = t2.max_order_id;

方案2:Python Pandas实现(本地离线分析场景)

适合已经把数据导出到csv/Excel做本地分析的场景:

import pandas as pd

# 读取数据,读Excel可替换为pd.read_excel()
df = pd.read_csv("你的订单数据文件路径.csv")
# 转换时间格式,生成精确到天的日期辅助列
df['Order_date'] = pd.to_datetime(df['Order_date'])
df['order_day'] = df['Order_date'].dt.date
# 按时间、订单ID升序排序后去重,每组保留最后一条最新记录
df_sorted = df.sort_values(by=['Order_date', 'OrderID'], ascending=True)
df_dedup = df_sorted.drop_duplicates(subset=['Email', 'order_day', 'TotalAmount'], keep='last')
# 删除辅助列得到最终结果
df_dedup = df_dedup.drop(columns=['order_day'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:24:01