我有一个显示过滤记录的网格视图,也就是说,主键有间隙ID
。
过滤器通常应用于 3 列:
dev_ID (nvarchar)
date
code_ID (nvarchar)
和一个随机的第 4 列,在下一个查询中不会被过滤。
选择gridview记录时,
我想返回DB
并获取选中gridview记录前后的10条记录
(PK
在这种情况下,我可以从 开始)。
这些记录可能仍然在主键和其他因素上NOT
是连续的,ID
之前可能没有 10 条记录,之后可能没有 10 条记录。
新查询应返回所选记录前后的 10 条记录,
其中 dev_ID = @x,code_Id = @y 和 date = @someDate。
当前的:
我能够返回两个单独查询中所需的结果,但无法将它们组合成一个结果集。
( SELECT TOP 10
tblData.*
FROM tblData
WHERE pk <= 5481
AND dev_ID = 'REC1'
AND code_ID = 'FMU'
AND CAST(event_date_time AS DATE) = '10/18/2013'
ORDER BY pk DESC
)
UNION
( SELECT TOP 10
tblData.*
FROM tblData
WHERE pk >= 5481
AND dev_ID = 'REC1'
AND code_ID = 'FMU'
AND CAST(event_date_time AS DATE) = '10/18/2013'
ORDER BY pk ASC
)
真的可以在这方面使用一些帮助。谢谢
更新:
我已经转向这种方法,可以使用一些帮助....
WITH NumberedMyTable AS
(
SELECT ROW_NUMBER() OVER (ORDER BY PK) AS RowNumber, *
FROM
tblData
WHERE dev_ID = 'REC1' AND code_ID = 'FMC' AND CAST(date_time as DATE) = '10/18/2013'
)
SELECT *
FROM
NumberedMyTable
WHERE
((**SELECT RowNumber FROM NumberedMyTable WHERE PK = 5481)** BETWEEN RowNumber + 10 AND RowNumber - 10)
这目前没有返回任何记录。
我该如何查询RowNumber
用于在WHERE
子句中返回所需范围的粗体部分?
原始努力:
WITH recs
AS ( SELECT TOP 1
*
FROM tblData
WHERE pk = GDV_PK
ORDER BY pk
),
r AS ( SELECT TOP 10
tblData.*
FROM tblData
WHERE dev_ID = @x
AND code_ID = @y
ORDER BY PK DESC
)
SELECT TOP 10
*
FROM tblData
WHERE dev_ID = ( SELECT dev_ID
FROM r
)
AND CAST(date_time AS DATE) = @someDate
ORDER BY pk