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

如何查询Key为Test且ID为最大值的行?SQL执行返回空如何解决

问题成因
  • 调整后的子查询逻辑存在范围偏差:SELECT max(ID) FROM Table返回的是全表所有行的最大ID值,如果这个ID对应的行的Key字段不等于Test,那么同时满足Key="Test"和ID等于全表最大ID的行不存在,自然返回空结果。
  • 最初编写的SQL存在两处语法错误:一是WHERE子句不能重复声明,AND WHERE属于语法错误;二是聚合函数MAX()不能直接放在WHERE过滤条件中,WHERE是在聚合计算执行前做行过滤的,无法直接引用聚合结果。
正确SQL写法

提供三种常用实现方案,可根据数据库场景选择:

方案1:修正子查询范围(兼容性最好,支持所有SQL标准数据库)

子查询内部先过滤Key="Test"的行,再取该范围内的最大ID:

SELECT * FROM Table 
WHERE Key = 'Test' 
AND ID = (SELECT MAX(ID) FROM Table WHERE Key = 'Test');

方案2:排序取首行(写法最简单,适合单条结果查询场景)

过滤出所有Key="Test"的行后按ID倒序,取第一条结果即可:

SELECT * FROM Table 
WHERE Key = 'Test' 
ORDER BY ID DESC 
LIMIT 1;

注:如果是SQL Server数据库,将LIMIT 1替换为TOP 1放在SELECT后面即可;Oracle数据库可以用WHERE ROWNUM = 1配合排序实现。

方案3:窗口函数实现(适合需要批量取多组Key对应最大ID行的场景)

如果数据库支持窗口函数(MySQL8.0+、PostgreSQL、SQL Server等),可以用ROW_NUMBER实现,扩展为多Key批量查询时不需要修改结构:

SELECT * FROM (
    SELECT *, 
    ROW_NUMBER() OVER (PARTITION BY Key ORDER BY ID DESC) AS rn
    FROM Table
) t 
WHERE Key = 'Test' AND rn = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:54:04