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

SQL中使用MAX与DISTINCT查询每个employee no对应最大credit no的全量记录

你之前使用的GROUP BY语句仅会返回employee no和对应最大credit no两个字段,无法返回该行的其余全部字段,因此无法拿到完整行记录。下面是两种常用的正确写法:

方案1:窗口函数写法(适用MySQL 8.0+、PostgreSQL、SQL Server等支持窗口函数的主流数据库)

SELECT * 
FROM (
    SELECT 
        *,
        -- 按员工号分组,组内按credit号倒序排序,第一条就是最大credit号对应的行
        ROW_NUMBER() OVER (PARTITION BY `employee no` ORDER BY `credit no` DESC) AS rn
    FROM mytable
) t
WHERE rn = 1;

如果同一个员工存在多条相同最大credit no的记录,且你需要全部返回,把ROW_NUMBER()替换为RANK()即可。

方案2:子查询关联写法(兼容所有数据库版本,包括低版本MySQL)

先聚合得到每个员工的最大credit no,再关联回原表匹配完整行数据:

SELECT t1.*
FROM mytable t1
INNER JOIN (
    SELECT `employee no`, MAX(`credit no`) AS max_credit
    FROM mytable
    GROUP BY `employee no`
) t2 ON t1.`employee no` = t2.`employee no` AND t1.`credit no` = t2.max_credit;

注意:你的字段名包含空格,SQL中需要用反引号(MySQL环境)或双引号(PostgreSQL、SQL Server等环境)包裹,避免触发语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:24:04