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

按重复账户ID分组,选取最高Account_Occupant对应行的SQL查询求助

解决每个账户取最大Account_Occupant记录的SQL方案

嘿,我完全懂你现在的头疼点——要从几千条记录里给每个账户揪出Account_Occupant序号最大的那一行,还得带出对应的姓名对吧?直接用GROUP BY确实容易卡壳,因为GROUP BY要求非聚合列必须在分组条件里,可姓名没法直接和最大序号绑定在一起。下面给你几种靠谱的解决办法,适配不同的数据库环境:

方法1:用窗口函数(推荐,支持现代数据库)

这是最直观且不易出错的方式,MySQL 8+、PostgreSQL、SQL Server等主流数据库都支持:

WITH ranked_records AS (
    SELECT 
        Account_Number,
        Account_Occupant,
        Name,
        -- 按账户分组,每组内按Account_Occupant降序排,给每条记录编行号
        ROW_NUMBER() OVER (PARTITION BY Account_Number ORDER BY Account_Occupant DESC) AS rn
    FROM your_table_name -- 替换成你的实际表名
)
SELECT 
    Account_Number,
    Account_Occupant,
    Name
FROM ranked_records
WHERE rn = 1; -- 只取每组里行号为1的(也就是序号最大的那条)

如果遇到同一个账户有多个相同的最大序号,可以把ROW_NUMBER()换成RANK(),这样会返回所有并列最大的记录;如果只想取任意一条,ROW_NUMBER()就足够。

方法2:MAX子查询+JOIN(适配旧版数据库)

要是你的数据库不支持窗口函数(比如MySQL 5.x),可以用这种组合方式:

SELECT 
    t.Account_Number,
    t.Account_Occupant,
    t.Name
FROM your_table_name t
INNER JOIN (
    -- 先查出每个账户的最大Account_Occupant值
    SELECT 
        Account_Number,
        MAX(Account_Occupant) AS max_occupant
    FROM your_table_name
    GROUP BY Account_Number
) max_vals ON t.Account_Number = max_vals.Account_Number 
           AND t.Account_Occupant = max_vals.max_occupant;

注意:如果同一个账户存在多个相同的最大序号,这个方法会返回多行,你可以根据业务需求加额外筛选条件。

方法3:关联子查询(写法简洁)

这种方式逻辑直白,适合快速验证:

SELECT 
    Account_Number,
    Account_Occupant,
    Name
FROM your_table_name t
-- 对每条记录,判断它的Account_Occupant是否是所属账户的最大值
WHERE Account_Occupant = (
    SELECT MAX(Account_Occupant)
    FROM your_table_name
    WHERE Account_Number = t.Account_Number
);

同样,若存在并列最大序号,会返回多条记录,需要的话可以结合DISTINCT或者其他条件调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:42:18