10 или 30, ваш рассказ и пример кода не совпадают.В любом случае, должно работать следующее:
select top 10 *
from (
select *,ROW_NUMBER() OVER (ORDER BY ABS(DATEDIFF(minute,Utc,@DateCenter))) as rn
from CheckIns
) t
order by rn
это не делает различий между теми, кто был до, и теми, кто был после - он просто ищет 10 ближайших.Если вы хотите, скажем, 10, предшествующих дате, и 10, которые следуют за ней, то вам потребуется 2 порядка или, возможно, предложение PARTITION BY
также для оконной функции ROW_NUMBER
.
Если вы хотите включить связанные результаты, вам нужно переключиться на RANK()
или DENSE_RANK()
вместо ROW_NUMBER()
.