查询以检索顶行而不使用除普通sql之外的TOP

时间:2013-07-04 18:48:23

标签: sql

我在采访中被问到这个问题,这似乎是一个常见的问题,但我无法得到或提出一些解决方案,所以需要你的帮助

请告诉我使用普通sql从表中检索前1行并且没有rownum,rowid,top或limit的方法。

由于

3 个答案:

答案 0 :(得分:3)

不带顶部的查询示例。

select * from Contests
Where ContestId = (SELECT MAX(ContestId) FROM Contests)

答案 1 :(得分:2)

您可以使用ANSI标准SQL使用row_number()函数和子查询来执行此操作:

select t.*
from (select t.*,
             row_number() over (order by <however you define the "top" row>) as seqnum
      from t
     ) t
where t = 1;

这假设您有一些排序方法,指定“顶部”行是什么。没有order by子句,任何行都可以。

我在外部查询中使用了*。严格来说,您只想在表格中包含列,不包括seqnum

答案 2 :(得分:2)

在MS SQL Server上,您可以使用SET ROWCOUNT n语句。如:

SET ROWCOUNT 1
SELECT * FROM Contests

有:

  

“导致SQL Server在指定后停止处理查询   返回行数。“

PS:如果我正确理解限制为MySQL中的LIMIT子句,那么应该使用它。