【发布时间】:2012-02-17 17:26:13
【问题描述】:
我有一个表,其中有一个名为 identifier 的 varchar() 字段,其中包含实体的唯一名称。
我想搜索表格并找到具有给定标识符的行并且在该标识符的任一侧最多 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)
该表有超过200万条记录,标识符字段可以长达1000个字符。
【问题讨论】:
标签: sql-server-2005 tsql