sql - 不使用任何函数或 where 子句的表的最后一行
问题描述
在一次技术面试中,我被要求在不使用 where 子句或任何其他已定义的 sql 函数的情况下找到表的最后一行。假设该表具有整数 ids 作为主键按升序排列。我只能通过order by desc
表格给出答案,后来坚持如何在没有位置或任何功能的情况下获得第一行。有人可以帮忙吗。
编辑:问题中没有数据库约束。假设任何解决查询的数据库
解决方案
在 Oracle 11g 及更低版本中,这是不可能的,因为它不支持TOP
//语法LIMIT
,FETCH
您通常会这样做:
SELECT *
FROM (
SELECT *
FROM table_name
ORDER BY id DESC
)
WHERE ROWNUM = 1;
在 PostgreSQL、Oracle 12 和 SQL Server 2012 中,您可以执行以下操作:
SELECT *
FROM table_name
ORDER BY id DESC
OFFSET 0 ROWS -- This line is optional in Oracle 12, PostgreSQL
FETCH FIRST 1 ROW ONLY;
在 SQL Server 中,您可以使用TOP
:
SELECT TOP 1
*
FROM table_name
ORDER BY id DESC
在 MySQL 中,您可以使用LIMIT
:
SELECT *
FROM table_name
ORDER BY id DESC
LIMIT 1;
推荐阅读
- javascript - 这是使用面向对象方法在 Javascript 中编写这个小型计算器的最佳方法吗?
- shell - 用另一个类似的替换行的脚本
- ruby-on-rails - 如果满足条件,则将布尔值设置为 true
- javascript - 从设置了 OAuth2.0 的 nodejs 进行外部 API 调用
- c# - 有没有办法通过检索 MySqlDataReader 布尔值在 Visual Studio C# 中打开/关闭复选框?
- android - 如何在 espresso android 测试中避免一些不稳定的测试失败?
- c - 将 setting_ 与地址连接起来
- python - 为什么登录表单和注册表单不显示错误?
- r - 回归输出中的重复值
- c - C中的指针表达式是如何解决的?例如: ((4* (-(*p2)))/(*p1)+10 其中 *p1=12 ,*p2=4