我有一个名为varchar()
的{{1}}字段的表格,其中包含该实体的唯一名称。
我想搜索该表,并在该标识符的任一侧找到具有给定标识符和最多10行的行,按字母顺序排序(即,搜索到的标识符及其两边相邻的行。)
在SQL Server 2005中制定此功能的最佳方法是什么?我猜这里有一些identifier
魔法可以做到这一点,但是我没有找到任何可以进行此类检查的查询。
这是我到目前为止所能接近的,但性能可怕:
ROW_NUMBER()
该表有超过200万条记录,标识符字段可以长达1000个字符。
答案 0 :(得分:5)
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
答案 1 :(得分:2)
这个答案更易于编译
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