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

SQL去重需求:排除与Seller类同金额的Own类记录

解决方案:保留Seller类并排除重复的Own类记录

核心思路

放弃分组取第一条的逻辑,换个更直接的方式:

  • 先把Own类的日期统一转成当月首日,和Seller类的日期格式对齐
  • 提取所有Seller类记录里「产品+账户+当月首日+金额」的唯一组合
  • 最终结果 = 全部Seller类记录 + 不在上述组合里的Own类记录

具体SQL实现

WITH seller_records AS (
    -- 提取Seller类的关键信息,日期已是当月首日,直接使用
    SELECT 
        product_id,
        account_id,
        date AS month_first_day,
        amount,
        'Seller' AS type
    FROM inttbl
),
own_processed AS (
    -- 处理Own类日期,转换为当月首日(不同数据库函数不同,按需替换)
    SELECT 
        product_id,
        account_id,
        -- MySQL写法:DATE_FORMAT(date, '%Y-%m-01')
        -- PostgreSQL写法:DATE_TRUNC('month', date)::DATE
        -- SQL Server写法:DATEFROMPARTS(YEAR(date), MONTH(date), 1)
        DATE_FORMAT(date, '%Y-%m-01') AS month_first_day,
        amount,
        'Own' AS type
    FROM exttbl
)
-- 合并数据:保留所有Seller,仅保留未与Seller重复的Own
SELECT * FROM seller_records
UNION ALL
SELECT op.* 
FROM own_processed op
LEFT JOIN seller_records sr 
    ON op.product_id = sr.product_id
    AND op.account_id = sr.account_id
    AND op.month_first_day = sr.month_first_day
    AND op.amount = sr.amount
WHERE sr.product_id IS NULL;

补充说明

  • 日期转换函数需根据你使用的数据库调整,代码里标注了主流数据库的对应写法
  • 这个逻辑精准过滤掉「同产品、同账户、当月、同金额」的重复Own记录,同时完整保留所有Seller类数据
  • 相比ROW_NUMBER的分组逻辑,不会出现误删需要保留的记录的情况

内容的提问来源于stack exchange,提问作者Let Soo Gas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:35:49