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查询前后两位的更多相关文章

  1. sql 四舍五入 保留两位小数

    一.问题描述 数据库里的 float momey 类型,都会精确到多位小数.但有时候 我们不需要那么精确,例如,只精确到两位有效数字. 二.sqlserver解决方案: 1. 使用 Round() 函 ...

  2. sql 四舍五入保留两位小数

    select convert(decimal(18, 2), 362315 * 1.0 / 10000) 1. ROUND(该函数,只是负责四舍五入到两位小数,但是不负责截断 只留两位小数,例如下例: ...

  3. SQL查询有两门以上不及格的学生及查询出全部及格的学生

    1.表结构: /*学生*/ create table student( sno int not null primary key, sname ) ); /*课程*/ create table cen ...

  4. sql查询比较两表不同数据与相同数据

    以下举例是查询相同数据,否则则相反 方法一: select * from A as x,B as y where x.a1=y.b1 and x.a2=y.b2 and x.a3=y.b3 方法二: ...

  5. SQL float 保留两位小数

    1. SQL 数据库里类型改为numeric,小数位设置成22. 在SQL语句中转换:select convert(字段,numeric(18,2)) AS 字段3. 在DataFormatStrin ...

  6. SQL查询要求两个条件同时成立

    SELECT * FROM [TABLE] WHERE CASE WHEN O_State='已处理' AND O_Pay='已付' THEN 0 ELSE 1 END=1

  7. [数据库] SQL查询语句表行列转换及一行数据转换成两列

    原文来自:http://blog.csdn.net/Eastmount/article/details/50559008 本文主要讲述了SQL查询语句表之间的行列转换,同时也包括如何将一行数据转换成两 ...

  8. 装饰者模式的学习(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 ...

  9. 关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其他位数)

    关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其... 方法一:使用to_char的fm格式,即: to_char(round(data.amount,2),'FM9999 ...

随机推荐

  1. Spark(十四)SparkStreaming的官方文档

    一.SparkCore.SparkSQL和SparkStreaming的类似之处 二.SparkStreaming的运行流程 2.1 图解说明 2.2 文字解说 1.我们在集群中的其中一台机器上提交我 ...

  2. box-sizing定义的盒模型之间的区别

  3. pyqt5猜数小程序

    程序界面用qt设计师制作,并用pyuic5命令转换成form.py文件 #-*- coding:utf-8 -*- from PyQt5.QtWidgets import QApplication,Q ...

  4. jenkins远程执行shell

    旧版本: 安装插件 SSH plugin 1. 增加一个domain,点击OK 点击 adding some credentials 填写要远程连接的服务器的用户名和密码(以下例子为连接到91机器的r ...

  5. [CodeForces-606E] Freelancer's Dreams 凸包 模型转换

    大致题意: 有一个人想要获得p个经验点和q元钱.现在给出n份工作,每份工作每天能得到Ai的经验值和Bi的钱,问最少需要工作多少天, 能使得总经验值>=p,总钱>=q. 先对给出的n份工作以 ...

  6. [代码审计]XiaoCms(后台任意文件上传至getshell,任意目录删除,会话固定漏洞)

    0x00 前言 这段时间就一直在搞代码审计了.针对自己的审计方法做一下总结,记录一下步骤. 审计没他,基础要牢,思路要清晰,姿势要多且正. 下面是自己审计的步骤,正在逐步调整,寻求效率最高. 0x01 ...

  7. Django-url反向解析与csrf-token设置

    url反向解析 在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等). 人们强烈希望不要硬 ...

  8. JSOI2018R2题解

    D1T1:潜入行动 裸的树上DP.f[i][j][0/1][0/1]表示以i为根的子树放j个设备,根有没有放,根有没有被子树监听,的方案数.转移显然. #include<cstdio> # ...

  9. Android源码目录结构详解

    Android 4.0|-- Makefile|-- bionic (bionic C库)|-- bootable (启动引导相关代码)|-- build (存放系统编译规则及generic等基础开发 ...

  10. 【ZOJ】3740:Water Level【DP】

    Water Level Time Limit: 2 Seconds      Memory Limit: 65536 KB Hangzhou is a beautiful city, especial ...