2 jluzh feng jluzh_feng 于 2014.12.04 12:21 提问

请问 sql 怎样 查询最接近某一值的3条数据?急急急!!!
sql

请问 sql 怎样 查询最接近某一值的3条数据?求sql语句如1,2,6,9,120,150,160,查询最接近9的3条记录数值,既1,2,6急急急啊!!!!!!!!!

8个回答

Syolin
Syolin   2014.12.04 14:11

这样应该满足你需求:

 SELECT top 3 * FROM Test WHERE ABS(IdB-5) in (
    SELECT top 4 ABS(IdB-5)as c1 FROM Test order by c1) and IdB<>5

其中 IdB 就是记录值的列名

Syolin
Syolin 其中的5 就是你要查找的值,找接近几就改为几就好了,最后 <>5 是排除掉自己这一条数据。
大约 3 年之前 回复
xuzuning
xuzuning   Ds   Rxr 2014.12.04 12:49

select * from T a where (select count(*) from T where n<a.n) < 3

ZXIAORONG
ZXIAORONG   2014.12.04 12:58

给你个思路,将该值与其他的做减法运算,然后排序,取前三条

Kelley_cfy
Kelley_cfy   2014.12.04 13:02

你把9的前三个和后三个都取出来,然后再用程序处理拿到最接近的三个就行了,效率不会有什么变化的

Kelley_cfy
Kelley_cfy   2014.12.04 13:11

类似与这样:
获取比9大的三条
select top(3) id from table where id > 9 order by id ASC
获取比9小的三条
select top(3) id from table where id < 9 order by id DESC

取出后和9比较找到最接近的(但是如果有 一些=9的就不行了)

要是有=9的那就需要先:
select id from table where id = 9
得到的数目为n
判断个数n是否大于3,如果大于就不用找了
否则如果n小于3,则
获取比9大的3-n条
select top(3-n) id from table where id > 9 order by id ASC
获取比9小的3-n条
select top(3-n) id from table where id < 9 order by id DESC

ALL

lchwhy
lchwhy   2014.12.04 13:14

1,2,6,9,120,150,160, 这串值是有序的么? 如果是的话

select top 3 * from table where value<9 order by value desc

Jay295290466
Jay295290466   2014.12.04 15:47

SELECT * FROM tablename

WHERE ABS(column-9)=(SELECT MIN(ABS(column-9)) FROM tablename)

i773254968
i773254968   2015.12.03 11:40

SELECT top 3 * FROM Test ORDER BY ABS(IDS - 9)

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!