我正在使用SQL Server 2014并试图获取第10条记录并编写以下查询。
SELECT TOP 1 *
FROM (SELECT TOP 10 * from Books) AS B
ORDER BY ID DESC;
但是它返回了我最后的记录。我发现它正在使用来自外部查询的ID DESC顺序。
再尝试几次,其结果如下。
查询1 。其工作正常。
SELECT *
FROM (SELECT TOP 10 * from Books) AS B
查询2 ,它无法正常工作。它应该是ID为10-1的返回记录。
SELECT *
FROM (SELECT TOP 10 * from Books) AS B
ORDER BY ID DESC;
查询3 。如果我在子查询中使用ORDER BY
,则它可以正常工作。
SELECT *
FROM (SELECT TOP 10 * from Books ORDER BY ID ASC) AS B
ORDER BY ID DESC;
谁能告诉我我在做什么错。为什么必须在子查询中使用ORDER BY
?
如果在查询1 中从1到10之间的ID中获取记录,那么为什么在查询2 中返回最后10条记录呢?我刚刚添加了ORDER BY DESC,它应该仅对子查询中提取的记录重新排序。?
也尝试对W3School Try it yourself link here进行以下查询并使其正常工作。
SELECT TOP 1 * FROM (SELECT TOP 10 * from Customers) AS B ORDER BY CustomerId DESC;
答案 0 :(得分:4)
子查询中没有排序。
尝试CTE-
try(PrintWriter out = ...)
答案 1 :(得分:2)
关于OFFSET
子句:
SELECT CustomerID
FROM Customers
ORDER BY CustomerID ASC
OFFSET 10 ROWS
FETCH NEXT 1 ROWS ONLY
在SQL Server 2012上运行,选择偏移量为10的元素,并且仅占一行。