Используйте CTE.Обратите внимание, что "внутренний" ORDER BY в этом случае подразумевается ROW_NUMBER / OVER.
;WITH cBase AS
(
SELECT
[Job].*,
ROW_NUMBER() OVER (ORDER BY [Job].[Date]) AS RowNum
FROM
[Job]
)
SELECT
*
FROM
cBase
WHERE
RowNum >= @Start AND RowNum < @End
--ORDER BY
--output order
Edit:
Ваш поиск между @Start и @End выполняется в последовательности, сгенерированнойROW_NUMBER на дату.Ранг не имеет отношения к этой последовательности.Ранг (при условии, что это столбец в таблице) будет игнорироваться, потому что ваша последовательность на Date.Вам не нужно сортировать по нему.
Если «rank» на самом деле «RowNum», то вам все равно не нужна «внутренняя» сортировка, потому что это операция над множествами.Вам это понадобится для самой внешней сортировки.
Если rank является вторичной сортировкой на Date, используйте это:
ROW_NUMBER() OVER (ORDER BY [Job].[Date], [Job].[Rank]) AS RowNum