slq server查询获取上一条下一条数据

啾啾我 2016-12-27 02:05:41

select top 1 Id from Product where Id<19748
UNION
select top 1 Id from Product where Id>19748


SELECT Id
FROM ( SELECT [Id] ,
ids = ROW_NUMBER() OVER (ORDER BY Id DESC )
FROM Product
) a
WHERE Id =19748
ORDER BY Id DESC;

因为要考虑到是否是第一条或最后一条数据的情况,具体怎么实现,我想用一条语句实现实现上一条,当前数据,下一条,一次显示结果,n+1,n,n-1,固定位置数据行数3行。如果是第一条数据上一条Id就为0,最后一条数据,下一行就为0,具体怎么实现。
...全文
285 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-12-27
  • 打赏
  • 举报
回复
引用 7 楼 sossos555 的回复:
[quote=引用 6 楼 roy_88 的回复:] SQL 2012以上版本可用以上函数去实现,取值前后行ID
我第的是2008的,LAG识别不了,能帮忙写个2008支持的吗?[/quote] e.g.
;WITH product(id,name)
AS
(
select 10,N'你' union all
select 11,N'我' union all
select 13,N'他' union all
select 17,N'她' union all
select 20,N'它'
),CTET
AS
(
SELECT id=0,name='',RN=0
UNION ALL 
SELECT *,ROW_NUMBER()OVER(ORDER BY id) AS RN FROM product
UNION ALL 
SELECT ID=0,name='',COUNT(*)+1 FROM product
)
SELECT id,t.name FROM CTET AS t WHERE EXISTS(SELECT 1 FROM CTET WHERE id=10 AND ABS(RN-t.RN)<=1)
/*
id	name
0	
10	你
11	我
*/
啾啾我 2016-12-27
  • 打赏
  • 举报
回复
引用 6 楼 roy_88 的回复:
SQL 2012以上版本可用以上函数去实现,取值前后行ID
我第的是2008的,LAG识别不了,能帮忙写个2008支持的吗?
中国风 2016-12-27
  • 打赏
  • 举报
回复
SQL 2012以上版本可用以上函数去实现,取值前后行ID
中国风 2016-12-27
  • 打赏
  • 举报
回复
e.g.

;WITH product(id,name)
AS
(
select 10,N'你' union all
select 11,N'我' union all
select 13,N'他' union all
select 17,N'她' union all
select 20,N'它'
)

SELECT 
*
FROM (SELECT id,LAG(id,1,0)OVER(ORDER BY id) AS 前一行ID,LEAD(id,1,0)OVER(ORDER BY id) AS 后一行ID   FROM Product ) AS t
WHERE Id=10

/*
id	前一行ID	后一行ID
10	0	11
*/
中国风 2016-12-27
  • 打赏
  • 举报
回复
e.g.
;WITH product
AS
(
SELECT 1 AS id
UNION ALL
SELECT 100 
UNION ALL
SELECT 19748
UNION ALL
SELECT 20000
UNION ALL
SELECT 30000)

SELECT 
*
FROM (SELECT id,LAG(id)OVER(ORDER BY id) AS 前一行,LEAD(id)OVER(ORDER BY id) AS 后一行   FROM Product ) AS t
WHERE Id=19748

/*
id	前一行	后一行
19748	100	20000
*/
啾啾我 2016-12-27
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
楼主给出一些数据,和你想要的结果;
不管我怎么查询都会显示3行,第一行就是当前查询的上一条数据,第二行为当前数据,第三行为当前查询的下一条数据, 当没有数据的时候就为该列值为0,前台我可以判断处理
啾啾我 2016-12-27
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
楼主给出一些数据,和你想要的结果;
例如 产品表 Id Name 10 你 11 我 13 他 17 她 20 它 当我想查询Id=10这条数据的话 ,结果是 0,10,11 其中0表示没有数据 当我查询 id =20这条数据的话,结果是 17,,20,0 当我查询 id=13这条数据的话,结果是 11,13,17
卖水果的net 2016-12-27
  • 打赏
  • 举报
回复
楼主给出一些数据,和你想要的结果;

662

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧