技术面试问题:无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
相关产品推荐
相关产品推荐

