热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SqlServer查找指定条件的上一条或下一条数据

SqlServer查找指定条件的上一条或下一条数据请问怎么样查找出指定一个条件,这个条件可能是自增长的数字型字段,也可能是唯一值的字符串型字段。怎么样获得这个条件,这条数据的上一条或下一
SqlServer 查找指定条件的上一条或下一条数据


请问怎么样查找出指定一个条件,这个条件可能是自增长的数字型字段,也可能是唯一值的字符串型字段。怎么样获得这个条件,这条数据的上一条或下一条数据呢?

应用的需求:如,邮件系统中,查找某一封邮件时,显示上一条邮件和下一条邮件。

6 个解决方案

#1


ROW_NUMBER() 编个号,取n-1,n,n+1就可以了

#2


select * from tb where id=@id --当前记录
union all
select top 1 * from tb where id>@id order by id --下一条记录
union all
select top 1 * from tb where id<@id order by id desc --上一条记录

#3


引用 2 楼  的回复:
SQL code
select * from tb where id=@id --当前记录
union all
select top 1 * from tb where id>@id order by id --下一条记录
union all
select top 1 * from tb where id<@id order by id desc --上一条记录




您这种只适用于条件字段为数值的情况。

#4


引用 1 楼  的回复:
ROW_NUMBER() 编个号,取n-1,n,n+1就可以了



问题在于,如何知道当前条件结果本身的Row_Number()编号?

#5


引用 4 楼  的回复:
引用 1 楼  的回复:

ROW_NUMBER() 编个号,取n-1,n,n+1就可以了



问题在于,如何知道当前条件结果本身的Row_Number()编号?

有上一条,下一条的概念,首先要有排序的概念呀?

如果你要取name的zhangsan的那一条。

;with maco as 
(
select *,row_number() over (order by id) from tablename 
)

select * from maco where name='zhangsan'

#6



-- 一种解决方案
;WITH TUsers AS 
(
SELECT *, ROW_NUMBER() OVER (ORDER BY vcUserID) AS _ROW
FROM DB_Fast_Users.dbo.T_Users AS A(NOLOCK)
)
SELECT *
into #T
FROM TUsers 

-- 上一条
select B.*
from #T AS A(NOLOCK)
left join #T AS B(NOLOCK) ON B._ROW = (A._ROW - 1)
where A.vcUserID='Test1'

-- 下一条
select B.*
from #T AS A(NOLOCK)
left join #T AS B(NOLOCK) ON B._ROW = (A._ROW + 1)
where A.vcUserID='Test1'

drop table #T



按照三位的解决思路,我是这样解决的,谢谢大家。
也方便给其他提供思路。

推荐阅读
  • 定制数据层关键字:数据层,访问,元数据,数据访问模型http://www.gaodaima.com/35448.html定制数据层_sqlserver ... [详细]
  • SqlServer分区表概述(转载)
    什么是分区表一般情况下,我们建立数据库表时,表数据都存放在一个文件里。但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件 ... [详细]
  • 在RAC环境中如何管理日志(redologfile)组Tuesday,2004-09-1411:52Eygle      htt ... [详细]
  • insert into select 主键自增_为什么 MySQL 的自增主键不单调也不连续
    为什么这么设计(Why’sTHEDesign)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问 ... [详细]
  • 一个不错的JDBC连接池教程(带具体例子)
    1.前言数据库应用,在许多软件系统中经常用到,是开发中大型系统不可缺少的辅助。但如果对数据库资源没有很好地管理(如:没有及时回收数据库的游 ... [详细]
  • 如何实现Percona Mysql Galera多读写集群的部署
    本篇文章给大家主要讲的是关于如何实现PerconaMysqlGalera多读写集群的部署的内容,感兴趣的话就一起来看看这篇文章吧,相信看完如何实现PerconaMysq ... [详细]
  • MySQL的SQL语句写法,除了那些基本的之外,还有一些也算比较常用的,这里记录下来,以便以后查找。好记性不如烂笔头& ... [详细]
  • 关于SQLSERVER的全文目录跟全文索引的区别
    很久没有写随笔了,本来之前想写一篇关于SQLSERVER全文索引的随笔,可惜没有时间,一直拖到现在才有时间写,不好意思让各位久等了~先介绍一下SQLSERVER中的存储类对象,哈哈,先介绍一下概念嘛 ... [详细]
  • 1.3.4ProfilerSQLServerProfiler是一个图形化的管理工具用于监督记录和检查SQLServer数据库的使用情况对系统管理员来说它是一个监视用户活动的间谍1. ... [详细]
  • 微软平台的软件开发系统中,有着一套自己的约定规则。熟悉.net开发的都会对异常处理不陌生,现阶段的各种编程语言中,都不乏异常处理机制,个中原理也都大同小异。sqlserver在批处 ... [详细]
  • 在目标队列中对消息进行排队时出现异常。错误:15404,状态:19。CouldnotobtaininformationaboutWindowsNTgroupuserSERVER ... [详细]
  • 这篇文章主要讲解了“SQLServer与Access数据库ASP代码有什么区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深 ... [详细]
  • 本文主要介绍关于数据库,sql,sqlserver的知识点,对【数据库——概述】和【数据库到底要怎么做】有兴趣的朋友可以看下由【用编程写诗】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的数据库相 ... [详细]
  • Oracle将表t_uaer的字段ID设置为自增:(用序列sequence的方法来实现)----创建表Createtablet_user(Idnumber(6),use ... [详细]
  • Java连接SqlServer2008数据库(转)
    Java连接SqlServer2008数据库首先下载JDBC:下载地址:http:www.microsoft.comzh-cndownloaddetails.aspx?id21599下载 ... [详细]
author-avatar
_雁火漫天_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有