1

我想知道是否有一些简单的方法、函数或其他方法可以从具有以下结果的查询中返回数据。

我有一个 SQL Express DB 2008 R2,一个包含给定列中的数字数据的表,比如 col T。

我在代码中获得了一个值 X,并希望返回最多三个记录。col T 等于我的值 X 的记录,以及之前和之后的记录,仅此而已。排序在 col T 上完成。之前的记录可能是文件的开头,因此不存在,同样,如果 X 等于最后一条记录,那么后面的记录将不存在,即文件/表的结尾。

表中可能不存在 X 的值。

我认为这类似于按数字顺序获得一系列结果。

任何解决此问题的帮助或指导将不胜感激。

再次感谢,

4

2 回答 2

2

它可能不是最佳解决方案,但是:

SELECT T
FROM theTable
WHERE T = X
UNION ALL
SELECT *
FROM 
(
    SELECT TOP 1 T
    FROM theTable
    WHERE T > X
    ORDER BY T
) blah
UNION ALL
SELECT *
FROM
(
    SELECT TOP 1 T
    FROM theTable
    WHERE T < X
    ORDER BY T DESC
) blah2
于 2012-09-04T13:51:18.287 回答
0
DECLARE @x int = 100

;WITH t as 
(
    select ROW_NUMBER() OVER (ORDER BY T ASC) AS row_nm,*
    from YourTable
)
, t1 as
(
    select *
    from t
    WHERE T = @x
)
select *
from t 
CROSS APPLY t1
WHERE t.row_nm BETWEEN t1.row_nm -1 and t1.row_nm + 1
于 2012-09-04T16:12:46.990 回答