热门标签 | 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



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

推荐阅读
  • 在运行于MS SQL Server 2005的.NET 2.0 Web应用中,我偶尔会遇到令人头疼的SQL死锁问题。过去,我们主要通过调整查询来解决这些问题,但这既耗时又不可靠。我希望能找到一种确定性的查询模式,确保从设计上彻底避免SQL死锁。 ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • 定制数据层关键字:数据层,访问,元数据,数据访问模型http://www.gaodaima.com/35448.html定制数据层_sqlserver ... [详细]
  • SqlServer分区表概述(转载)
    什么是分区表一般情况下,我们建立数据库表时,表数据都存放在一个文件里。但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件 ... [详细]
  • 在RAC环境中如何管理日志(redologfile)组Tuesday,2004-09-1411:52Eygle      htt ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 深入解析 SQL 数据库查询技术
    本文深入探讨了SQL数据库查询技术,重点讲解了单表查询的各种方法。首先,介绍了如何从表中选择特定的列,包括查询指定列、查询所有列以及计算值的查询。此外,还详细解释了如何使用列别名来修改查询结果的列标题,并介绍了更名运算的应用场景和实现方式。通过这些内容,读者可以更好地理解和掌握SQL查询的基本技巧和高级用法。 ... [详细]
  • 在目标队列中对消息进行排队时出现异常。错误:15404,状态:19。CouldnotobtaininformationaboutWindowsNTgroupuserSERVER ... [详细]
  • 这篇文章主要讲解了“SQLServer与Access数据库ASP代码有什么区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深 ... [详细]
  • 本文主要介绍关于数据库,sql,sqlserver的知识点,对【数据库——概述】和【数据库到底要怎么做】有兴趣的朋友可以看下由【用编程写诗】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的数据库相 ... [详细]
  • Oracle将表t_uaer的字段ID设置为自增:(用序列sequence的方法来实现)----创建表Createtablet_user(Idnumber(6),use ... [详细]
  • Program.csusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threadi ... [详细]
  • Asp.net网站部署时遇到的一些问题
    很少部署网站,这几天有一个网站帮朋友部署,期间遇到一些问题,经查找各种网络资源,最终解决,先将遇到的问题及解决办法分享一下。系统Win7+iis7.5+sqlserver2008+.Ne ... [详细]
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社区 版权所有