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

查询表中各ID对应最大Other ID的可编辑SQL语句

嘿,这个问题我太熟悉了!之前用MAX加JOIN的时候也踩过同样的坑——那种查询返回的是聚合后的虚拟结果集,不是直接来自基表的记录,自然没法编辑。给你两个靠谱的解决方案,都能返回可编辑的原表行:

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

用ROW_NUMBER()窗口函数给每个ID分组内的行按Other ID降序排序,然后筛选出每组排名第一的行,这样返回的是原表的完整记录,完全支持编辑:

SELECT t.ID, t.[Other ID]
FROM (
    SELECT 
        ID, 
        [Other ID],
        -- 按ID分组,组内按Other ID从大到小排名
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY [Other ID] DESC) AS row_rank
    FROM 你的表名
) t
WHERE t.row_rank = 1

如果你的数据里存在同一个ID有多个相同的最大Other ID的情况,ROW_NUMBER()会随机选一个;要是想保留所有并列最大值的行,可以把ROW_NUMBER()换成RANK()。

方案2:关联子查询(兼容老版本数据库)

如果你的数据库不支持窗口函数(比如一些老版本的SQL Server、Access),可以用关联子查询定位每个ID的最大Other ID,再关联回原表获取整行数据:

SELECT t.ID, t.[Other ID]
FROM 你的表名 t
WHERE t.[Other ID] = (
    SELECT MAX([Other ID])
    FROM 你的表名
    WHERE ID = t.ID
)

这个方案的特点是:如果同一个ID有多个相同的最大Other ID,会返回所有这些行;如果你的业务里不会出现这种情况,用这个完全没问题,而且返回的都是原表的可编辑行。

为什么之前的JOIN方案不可编辑?

你之前写的查询大概是类似这样的:

SELECT t.ID, max_o.max_other_id
FROM 你的表名 t
JOIN (
    SELECT ID, MAX([Other ID]) AS max_other_id
    FROM 你的表名
    GROUP BY ID
) max_o ON t.ID = max_o.ID

这种查询返回的是基表和聚合子查询的连接结果,其中max_other_id是聚合计算出来的虚拟字段,不是原表的原生字段,所以整个结果集是不可更新的视图。而上面的两个方案都是直接筛选原表的行,所以能正常编辑其他字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:39:35