ric*_*ent 3 t-sql sql-server-2005
我有一个带有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)
Run Code Online (Sandbox Code Playgroud)
该表有超过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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
436 次 |
最近记录: |