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

SQL查询多列时仅对case_number单列去重的实现方案咨询

SQL仅按case_number单列去重返回多列数据实现方案

核心逻辑为给每个case_number分组内的行做排序标记,筛选出每组内的第一行即可,以下是两种通用实现方案:

方案1:窗口函数法(兼容MySQL 8.0+、PostgreSQL、SQL Server、Oracle等所有支持SQL:2003标准的数据库)

该方案灵活度最高,可自定义每组保留行的规则,示例默认保留每个case_number最新录入的行:

WITH ranked_tickets AS (
    SELECT 
        case_number, 
        name, 
        date_entered,
        -- 按case_number分组,组内按date_entered倒序排序,最新的行标记为1
        ROW_NUMBER() OVER (PARTITION BY case_number ORDER BY date_entered DESC) AS row_rank
    FROM ticket
)
SELECT case_number, name, date_entered 
FROM ranked_tickets 
WHERE row_rank = 1
ORDER BY date_entered;

如果需要保留每个case_number最早录入的行,把ORDER BY date_entered DESC改成ORDER BY date_entered ASC即可。

方案2:子查询关联法(兼容MySQL 5.x等不支持窗口函数的低版本数据库)

通过分组先拿到每个case_number对应的目标date_entered,再关联原表拿到完整行数据:

SELECT t1.case_number, t1.name, t1.date_entered
FROM ticket t1
INNER JOIN (
    -- 先取每个case_number的最新录入日期,需要最早的就把MAX改成MIN
    SELECT case_number, MAX(date_entered) AS target_date
    FROM ticket
    GROUP BY case_number
) t2 ON t1.case_number = t2.case_number AND t1.date_entered = t2.target_date
ORDER BY t1.date_entered;

注意:如果同一个case_number存在多条date_entered完全相同的行,该方案会返回所有匹配的行,可额外增加自增主键等唯一字段的判断实现精确去重。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:45:01