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

如何编写SQL查询仅保留CompanyName与JobStartDate组合唯一的记录

基于指定字段组合去重的SQL解决方案

你需要实现的是仅保留CompanyName和JobStartDate组合唯一的记录,普通的DISTINCT会对所有查询字段做去重,所以满足不了需求。这里给两种通用的解决方法:

方法一:使用窗口函数(适用于MySQL 8+、PostgreSQL、SQL Server等主流数据库)

通过ROW_NUMBER()窗口函数给每个CompanyName+JobStartDate组合的行编号,只保留每组的第一条记录:

SELECT 
    Name,
    CompanyName,
    JobStartDate,
    Birthday,
    Age,
    `Favorite Ice Cream`,
    Height
FROM (
    SELECT 
        *,
        -- 按指定字段分组,给每组行编号
        ROW_NUMBER() OVER (PARTITION BY CompanyName, JobStartDate ORDER BY (SELECT NULL)) AS rn
    FROM `sample_person_data` -- 注意表名用反引号,避免和关键字冲突
) AS sub_query
WHERE rn = 1;
  • PARTITION BY CompanyName, JobStartDate:把数据按这两个字段的组合分组
  • ORDER BY (SELECT NULL):不指定排序规则,数据库会随机保留每组的一条记录;如果需要固定保留某条(比如最新入职的),可以改成ORDER BY JobStartDate DESC这类规则

方法二:使用GROUP BY+聚合函数(适用于不支持窗口函数的旧版数据库)

如果你的数据库不支持窗口函数(比如MySQL 5.7及更早版本),可以用GROUP BY指定去重字段,其他字段用聚合函数取任意值:

SELECT 
    MAX(Name) AS Name,
    CompanyName,
    JobStartDate,
    MAX(Birthday) AS Birthday,
    MAX(Age) AS Age,
    MAX(`Favorite Ice Cream`) AS `Favorite Ice Cream`,
    MAX(Height) AS Height
FROM `sample_person_data`
GROUP BY CompanyName, JobStartDate;

这里用MAX()只是随便选一个值,你也可以用MIN(),因为需求不关注其他字段的具体取值,只要保留一条就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:35:16