Я знаю, что вы можете использовать ROW_NUMER()
, чтобы получить номер строки, а затем выполнить WHERE
на по результатам, как показано here:эффективно извлекать диапазон строк из отборного с ORDER BY заявление
USE AdventureWorks2012;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS RowNumber
FROM Sales.SalesOrderHeader
)
SELECT SalesOrderID, OrderDate, RowNumber
FROM OrderedOrders
WHERE RowNumber BETWEEN 50 AND 60;
Однако, это будет первым сортировать все данные и только потом извлекать ряд строк.
Поскольку можно найти k-й член отсортированного массива: How to find the kth largest element in an unsorted array of length n in O(n)?, я надеюсь, он также будет возможен в SQL.
он находится в SQL Server 2012+ – Lamak
@Lamak Что значит? это если я использую вышеупомянутый синтаксис? что, если я делаю вложенный «SELECT» вместо 'WITH'? – Mugen
https://www.mssqltips.com/sqlservertip/2420/sql-server-2012-server-side-paging/ – mohan111