У меня есть таблица с полем varchar()
с именем identifier
, в котором содержится уникальное имя для сущности.
Я хотел бы найти в таблице и найти строки с заданным идентификатором и до 10 строк по обе стороны от этого идентификатора, отсортированные в алфавитном порядке (т. Е. Искомый идентификатор и соседние с ним ряды с обеих сторон).
Каков наилучший способ сформулировать это в SQL Server 2005? Я предполагаю, что есть какая-то магия ROW_NUMBER()
, которая может сделать это, но я не нахожу никаких запросов на переход, чтобы сделать подобные вещи.
Это настолько близко, насколько я могу понять, но производительность ужасна :
WITH
allrows AS (
SELECT *, ROW_NUMBER() OVER(ORDER BY identifier DESC) AS RN
FROM mytable
),
centerrow AS (
SELECT RN AS CRN FROM allrows WHERE identifier = 'MyValue'
)
SELECT * FROM allrows, centerrow
WHERE RN BETWEEN (centerrow.CRN - 10) AND (centerrow.CRN + 10)
В таблице содержится более 2 миллионов записей, а поле идентификатора может содержать до 1000 символов.