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

查询近2个月内下单完全相同订单的重复客户

解决整单重复订单的筛选问题

你之前的SQL只针对单个商品维度统计,根本没法判断整单的商品组合及对应数量是否完全一致,自然得不到符合预期的结果。要实现需求,核心是先给每个订单生成一个能代表其商品+数量组合的"唯一指纹",再基于客户和这个指纹抓取重复订单。

修正后的实现思路

  1. 生成订单指纹:把每个订单下的所有商品和对应数量按固定规则(比如按商品名排序后拼接)整合成一个字符串,确保完全相同的订单会得到一模一样的指纹。
  2. 筛选重复指纹:针对近2个月的订单,按客户+订单指纹分组,找出出现过不止一次的组合。
  3. 关联回原表:把符合条件的订单和客户信息完整提取出来。

可直接运行的SQL代码

-- 生成每个订单的商品组合指纹,限定近2个月的订单
WITH OrderFingerprints AS (
    SELECT
        o.Order_No,
        o.Customer_ID,
        o.Order_Date,
        -- 按商品排序后拼接,避免因商品顺序不同导致指纹不一致
        STRING_AGG(CONCAT(oi.Order_Items, ':', oi.Order_Quantity), '|' ORDER BY oi.Order_Items) AS Order_Fingerprint
    FROM Order_Table o
    JOIN Order_Items_Table oi ON o.Order_No = oi.Order_No
    -- 近2个月的日期条件,根据你的数据库类型调整函数
    WHERE o.Order_Date >= DATEADD(MONTH, -2, GETDATE())
      -- 可选:如果只统计已完成的有效订单,加上这个条件
      AND o.Order_Status = '已完成'
    GROUP BY o.Order_No, o.Customer_ID, o.Order_Date
),
-- 找出客户名下重复出现的订单指纹
DuplicateOrderGroups AS (
    SELECT
        Customer_ID,
        Order_Fingerprint
    FROM OrderFingerprints
    GROUP BY Customer_ID, Order_Fingerprint
    -- 筛选出现过至少2次不同订单的组合
    HAVING COUNT(DISTINCT Order_No) > 1
)
-- 取出所有符合条件的订单及客户信息
SELECT
    o.*,
    ofp.Order_Fingerprint
FROM Order_Table o
JOIN OrderFingerprints ofp ON o.Order_No = ofp.Order_No
JOIN DuplicateOrderGroups dog ON ofp.Customer_ID = dog.Customer_ID AND ofp.Order_Fingerprint = dog.Order_Fingerprint
ORDER BY o.Customer_ID, o.Order_Date;

不同数据库的适配说明

  • 字符串拼接函数:
    • SQL Server/PostgreSQL:使用STRING_AGG
    • MySQL:替换为GROUP_CONCAT(CONCAT(oi.Order_Items, ':', oi.Order_Quantity) ORDER BY oi.Order_Items SEPARATOR '|')
  • 日期条件:
    • MySQL:o.Order_Date >= DATE_SUB(CURDATE(), INTERVAL 2 MONTH)
    • Oracle:o.Order_Date >= ADD_MONTHS(SYSDATE, -2)
  • 大订单优化:如果订单商品数量较多,拼接字符串可能超长,可将拼接结果转成哈希值(比如MD5(STRING_AGG(...))),用哈希值做指纹更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:35:24