如何搜索给定字符串值"around"行?



我有一个表,其中有一个名为identifiervarchar()字段,该字段包含实体的唯一名称。

我想搜索该表,并在该标识符的两侧找到具有给定标识符的行,最多10行,按字母顺序排序(即,搜索到的标识符及其两侧的相邻行)。

在SQLServer2005中对此进行表述的最佳方式是什么?我猜有一些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)

该表有200多万条记录,标识符字段可以长达1000个字符。

SELECT TOP 11 * FROM MyTable WHERE identifier >= 'My Value' ORDER BY identifier ASC
UNION ALL
SELECT TOP 10 * FROM MyTable WHERE identifier < 'My Value' ORDER BY identifier DESC

这个答案更适合

declare @e table(identifier varchar(5))
insert @e values (0),(1),(2),(3),(4)
SELECT * FROM(
SELECT top 2 * 
FROM @e WHERE 
identifier >= '2' 
ORDER BY identifier asc) a
UNION ALL 
SELECT * FROM (
SELECT top 1 * 
FROM @e 
WHERE identifier < '2' 
ORDER BY identifier desc ) b

最新更新