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

MySQL使用row_number() over partition by实现列去重问题求解

问题修复与实现代码

你原有代码存在语法错误和逻辑规则错误,修正后的可执行语句如下,完全匹配你的需求:

SELECT product_name, id, date, customer_id
FROM (
    SELECT 
        product_name,
        id,
        date,
        customer_id,
        ROW_NUMBER() OVER(PARTITION BY customer_id, product_name ORDER BY date DESC) AS rn
    FROM mvmt_dtl e
    WHERE 
        mvt_date_id_part_key >= '2020-01-01'
        AND product_name IN ('Product P1', 'Product P2')
        AND customer_id IN (SELECT a.line_number FROM simp_output_dci a)
) AS filtered_data
WHERE rn = 1
ORDER BY customer_id;

关键逻辑说明

  • 语法修正:补全了原语句中customer_id和order by之间缺失的空格
  • 分区规则调整:将窗口函数的分区字段改为customer_id + product_name,保证每个用户下的每个产品单独归类到一个分组,每个分组只会生成一个行号为1的记录
  • 产品过滤:在子查询中新增product_name的过滤条件,仅保留你需要的P1、P2两个产品
  • 去重实现:外层筛选rn=1的记录,即可实现每个customer_id分区内Product列唯一,其余列保留对应最新记录的原始值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:00:03