Sql 返回非顺序记录
我有一个显示过滤记录的gridview,也就是说,主键ID中有间隙 过滤器通常应用于3列:Sql 返回非顺序记录,sql,sql-server,tsql,sql-server-2008-r2,Sql,Sql Server,Tsql,Sql Server 2008 R2,我有一个显示过滤记录的gridview,也就是说,主键ID中有间隙 过滤器通常应用于3列: dev_ID (nvarchar) date code_ID (nvarchar) 和一个随机的第四列,在下一次查询中将不进行过滤 选择gridview记录时 我想返回到DB并获取所选gridview记录前后的10条记录 我可以从这个例子中的PK开始 根据主键ID和其他因素,这些记录可能仍然不连续 之前可能没有10条记录,之后可能没有10条记录 新查询应返回所选记录前后的10条记录 其中dev_ID=@
dev_ID (nvarchar)
date
code_ID (nvarchar)
和一个随机的第四列,在下一次查询中将不进行过滤
选择gridview记录时
我想返回到DB并获取所选gridview记录前后的10条记录
我可以从这个例子中的PK开始
根据主键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
)
这并不返回任何记录
如何查询行号
在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
我最终提出了一个有效的解决方案,将它发布在这里,供其他可能于本周来阿克罗斯的人使用
Select * From
(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'
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') A
ORDER BY pk ASC
那么tblTelematicData就是保存您想要的21条记录的表吗?抱歉,没有tblData,正在修复错误。感谢lyou的回复,但是,这似乎不起作用,UNION附近的语法不正确,并且它找不到标识pk之前10条和之后10条记录。我检查了,UNION不喜欢顺序。但我无法理解个别种类是如何不起作用的?
SELECT TOP 10 tblData.*
FROM tblData
WHERE dev_ID = @x AND code_ID = @y and date = @someDate
ORDER BY PK DESC
union
SELECT TOP 10 tblData.*
FROM tblData
WHERE dev_ID = @x AND code_ID = @y and date = @someDate
ORDER BY PK ASC
Select * From
(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'
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') A
ORDER BY pk ASC