Вам нужны средства заказа постов. Если у вас есть это, то вы можете сделать что-то вроде следующего в SQL Server 2005+, где вы передаете желаемый номер элемента:
With OrderedPosts As
(
Select ...
, ROW_NUMBER() OVER ( ORDER BY PublishDate ) As ItemRank
From ..
Where ...
)
Select
From OrderedPosts
Where ItemRank = @ItemNumber
В коде сайта вам нужно будет отследить, на каком номере вы сейчас находитесь, а затем вычесть один и запрос, чтобы получить предыдущий, или добавить один и запрос, чтобы получить следующий.
Если вы хотите, чтобы следующее и предыдущее вместе с текущим в одном запросе, вы могли бы сделать что-то вроде:
With OrderedPosts As
(
Select ...
, ROW_NUMBER() OVER ( ORDER BY PublishDate ) As ItemRank
From ..
Where ...
)
Select
From OrderedPosts
Where ItemRank Between (@ItemNumber - 1) And (@ItemNumber + 1)