首页 > 解决方案 > 不使用任何函数或 where 子句的表的最后一行

问题描述

在一次技术面试中,我被要求在不使用 where 子句或任何其他已定义的 sql 函数的情况下找到表的最后一行。假设该表具有整数 ids 作为主键按升序排列。我只能通过order by desc表格给出答案,后来坚持如何在没有位置或任何功能的情况下获得第一行。有人可以帮忙吗。

编辑:问题中没有数据库约束。假设任何解决查询的数据库

标签: sql

解决方案


在 Oracle 11g 及更低版本中,这是不可能的,因为它不支持TOP//语法LIMITFETCH您通常会这样做:

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;

推荐阅读