Есть некоторые большие функции WINDOWED для работы по записям в более поздних версиях SQL Server (2012+). Но в 2008 году они недоступны. Вместо этого вы можете использовать OUTER APPLY. Это позволит вам фильтровать вспомогательный запрос, используя значения из основного запроса.
Outer Apply Query Example
WITH SampleValues AS
(
/* This CTE creates some sample values.
*/
SELECT
r.n
FROM
(
VALUES
(1),
(5),
(7)
) AS r(n)
)
SELECT
o.n,
prev.Previous_n,
[next].Next_n
FROM
SampleValues AS o
OUTER APPLY
(
-- Find the previou value by looking for the TOP 1 before the current.
SELECT TOP 1
o.n AS Original_n,
p.n AS Previous_n
FROM
SampleValues AS p
WHERE
p.n < o.n
ORDER BY
p.n DESC
) AS prev
OUTER APPLY
(
-- Find the next value by looking for the TOP 1 after the current.
SELECT TOP 1
n.n AS Original_n,
n.n AS Next_n
FROM
SampleValues AS n
WHERE
n.n > o.n
ORDER BY
n.n ASC
)AS [next]
;
Что произойдет в случае первого и последнего значения таблицы –
Если вы ищете статический результат (т.е. ответ на один, уже известный идентификатор), это так же просто, как «SELECT TOP 1 ID FROM TABLE WHERE ID> 1 ORDER BY ID'. Если нет, вы должны отредактировать свой вопрос, чтобы уточнить тип запроса, который вы хотите выполнить. –
@PareshJ Я ожидаю некоторую ошибку в этом случае – user2650277