sql查询前后两位
SQL排名的问题,A这个人在数据库里排第十,怎么查询一个他前面两位,后面两位,包括自己的五条数据,各位有啥高招?
DECLARE @table TABLE
(
id INT PRIMARY KEY
IDENTITY(1, 1) ,
NAME VARCHAR(20)
)
INSERT INTO @table( NAME )VALUES ( 'AA' )
INSERT INTO @table( NAME )VALUES ( 'BB' )
INSERT INTO @table( NAME )VALUES ( 'CC' )
INSERT INTO @table( NAME )VALUES ( 'DD' )
INSERT INTO @table( NAME )VALUES ( 'EE' )
INSERT INTO @table( NAME )VALUES ( 'FF' )
INSERT INTO @table( NAME )VALUES ( 'GG' )
INSERT INTO @table( NAME )VALUES ( 'HH' )
INSERT INTO @table( NAME )VALUES ( 'II' )
INSERT INTO @table( NAME )VALUES ( 'JJ' )
方法: 1 .添加一个列,排序,记录中间需要的 mun 数,之后利用 between and 查询
DECLARE @min INT ,
@max INT SELECT @min = v.mun - 2 ,
@max = v.mun + 2
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY id ASC ) AS mun ,id,NAME
FROM @table
) v
WHERE v.NAME = 'ee' SELECT w.id ,
w.NAME
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY id ASC ) AS mun ,id,name
FROM @table
) w
WHERE w.mun BETWEEN @min AND @max
方法2. 利用链表查询,将一个分成两个集合,利用on 做条件 ON t1.mun BETWEEN t2.mun - 2 AND t2.mun + 2
SELECT t1.id ,
t1.NAME
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY id ASC ) AS mun ,id ,NAME
FROM @table
) T1
RIGHT JOIN
( SELECT ROW_NUMBER() OVER ( ORDER BY id ASC ) AS mun ,id ,NAME
FROM @table
) T2 ON t1.mun BETWEEN t2.mun - 2 AND t2.mun + 2
WHERE T2.NAME = 'EE'
方法3. 利用EXISTS
例子
SELECT *
FROM @table T1
WHERE EXISTS
( SELECT *
FROM @table T2
WHERE T2.NAME = 'EE'
AND T1.id BETWEEN T2.id - 2 AND T2.id + 2 )
完善
SELECT T1.id ,T1.name
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY id ASC ) AS mun ,id ,NAME
FROM @table
) T1
WHERE EXISTS
( SELECT mun ,id ,NAME
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY id ASC ) AS mun ,id ,NAME
FROM @table
) T2
WHERE T2.NAME = 'EE'
AND T1.mun BETWEEN T2.mun - 2 AND T2.mun + 2
)
张姿势了~_~!
sql查询前后两位的更多相关文章
- sql 四舍五入 保留两位小数
一.问题描述 数据库里的 float momey 类型,都会精确到多位小数.但有时候 我们不需要那么精确,例如,只精确到两位有效数字. 二.sqlserver解决方案: 1. 使用 Round() 函 ...
- sql 四舍五入保留两位小数
select convert(decimal(18, 2), 362315 * 1.0 / 10000) 1. ROUND(该函数,只是负责四舍五入到两位小数,但是不负责截断 只留两位小数,例如下例: ...
- SQL查询有两门以上不及格的学生及查询出全部及格的学生
1.表结构: /*学生*/ create table student( sno int not null primary key, sname ) ); /*课程*/ create table cen ...
- sql查询比较两表不同数据与相同数据
以下举例是查询相同数据,否则则相反 方法一: select * from A as x,B as y where x.a1=y.b1 and x.a2=y.b2 and x.a3=y.b3 方法二: ...
- SQL float 保留两位小数
1. SQL 数据库里类型改为numeric,小数位设置成22. 在SQL语句中转换:select convert(字段,numeric(18,2)) AS 字段3. 在DataFormatStrin ...
- SQL查询要求两个条件同时成立
SELECT * FROM [TABLE] WHERE CASE WHEN O_State='已处理' AND O_Pay='已付' THEN 0 ELSE 1 END=1
- [数据库] SQL查询语句表行列转换及一行数据转换成两列
原文来自:http://blog.csdn.net/Eastmount/article/details/50559008 本文主要讲述了SQL查询语句表之间的行列转换,同时也包括如何将一行数据转换成两 ...
- 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取
装饰者模式的学习(c#) 案例转自https://www.cnblogs.com/stonefeng/p/5679638.html //主体基类 using System;using System.C ...
- 关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其他位数)
关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其... 方法一:使用to_char的fm格式,即: to_char(round(data.amount,2),'FM9999 ...
随机推荐
- XeLaTeX下如何以原大小显示PNG
在XeLaTeX里直接使用\includegraphics{test.png}这样的命令引入PNG,可能会发现图片直接被缩放到占满文档宽度,这是因为PNG这种bitmap类型的图片里通常不会带上met ...
- Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决
有人会说不建议Wpf中使用Winform控件,有人会说建议使用Winform控件在Wpf下的替代方案,然而在实际工作中由于项目的特殊需求,考虑到时间.成本等因素,往往难免会碰到在WPF中使用Winfr ...
- 转:springboot(二):web综合开发
web开发 spring boot web开发非常的简单,其中包括常用的json输出.filters.property.log等 json 接口开发 在以前的spring 开发的时候需要我们提供jso ...
- 黑马程序员_java基础笔记(11)...反射
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 1,字节码.2,Constructor类.3,Field类.4,Method类.5 ...
- 000 Excel获取数据
1.目标网址 http://data.10jqka.com.cn/funds/ggzjl/field/zjjlr 二:需求一 1.需求 爬单个页面的数据 2.变化网址 http://data.10jq ...
- 关于ueditor的使用心得
http://blog.csdn.net/baronyang/article/details/45640181 1.取编辑器内的内容: <span style="font-size:1 ...
- 牛客练习赛3 F - 监视任务
链接:https://www.nowcoder.net/acm/contest/13/F来源:牛客网 题目描述
- webstorm2018最新激活码license server
2018.7.5最新激活码: license server:https://s.tuzhihao.com:666/ 以后持续更新....
- hdu1527下沙小面的(二)
B - 下沙小面的(2) Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- wmware虚拟系统光盘的问题
拿到系统盘,需要通过UltralSO工具中:工具-制作光盘映像文件,做成系统iso文件,而不是直接拷贝系统盘里的文件压缩成iso格式. 主要原因:主要是系统盘有一个引导区,win系统复制光盘时,是不能 ...