我在从表格中提取第5行时发现了一个非常奇怪的事情我使用了下面提到的查询并且认为可能首先取前5行,然后在外部查询中按顺序排序前1订购。但是下面的查询输出错误。
select top 1 *
from
(select *
from
(select top 5 BusinessEntityID, FirstName, LastName
from person.person) as a
) as b
order by
b.BusinessEntityID desc
这个查询给了我最后一行而不是第五行。我知道这可以通过row_number()
函数轻松实现,但我想知道为什么上面的查询输出错误。
答案 0 :(得分:3)
我相信你错过了ORDER BY
查询中的TOP 5
。您可以删除其中一个SELECT *
select top 1 *
from (
select top 5 BusinessEntityID,FirstName,LastName
from person.person
order by BusinessEntityID asc
) as a
order by a.BusinessEntityID desc
另外,你是对的,这对于ROW_NUMBER
来说会更简单。