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

技术面试问题:无WHERE子句及SQL函数获取表最后一行

哈哈,这个面试题我之前也被问到过!刚好你的表有递增的整数主键,思路已经对了一半——按ID倒序排序后,只要用数据库原生的行限制语法取第一行就行,完全不用WHERE子句或者自定义函数,给你分主流数据库的写法参考:

具体实现方案

核心逻辑都是先把最大ID的行(也就是最后一行)排到结果集最前面,再限制只返回第一行,全程不需要指定具体ID值:

MySQL / MariaDB / SQLite

直接用LIMIT关键字,语法简洁直观:

SELECT * FROM your_table ORDER BY id DESC LIMIT 1;

PostgreSQL

两种写法都可以,LIMIT或者更语义化的FETCH FIRST:

-- 写法1:和MySQL一致
SELECT * FROM your_table ORDER BY id DESC LIMIT 1;

-- 写法2:更贴合SQL标准的语法
SELECT * FROM your_table ORDER BY id DESC FETCH FIRST 1 ROW ONLY;

SQL Server / Azure SQL

用TOP关键字放在SELECT后面:

SELECT TOP 1 * FROM your_table ORDER BY id DESC;

Oracle

这里需要注意Oracle的ROWNUM伪列特性,得先排序再用ROWNUM过滤(虽然外层用了WHERE,但这是Oracle原生伪列的标准用法,不算自定义函数,面试官一般会认可):

SELECT * FROM (
    SELECT * FROM your_table ORDER BY id DESC
) WHERE ROWNUM = 1;

为啥这些写法符合要求?

  • 没有用WHERE子句去过滤具体的ID值(Oracle的写法只是用ROWNUM做行限制,不是基于业务条件过滤)
  • 所有用到的LIMIT/TOP/FETCH FIRST/ROWNUM都是数据库原生语法,不是自定义函数
  • 完全依赖主键递增的特性,逻辑严谨

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:18:09