数据如下:id name value
1 a 1.2
2 b 2.2
3 c 1.3
4 d 1.8
5 e 2.1给出任意一个值 a求与value 最接近的值。 也就是 |a-value| 绝对值最小的value.比如给的是: 1.5 它最接近的绝对值就是 1.3...想了很久,也不知道什么算法性能最高。。
1 a 1.2
2 b 2.2
3 c 1.3
4 d 1.8
5 e 2.1给出任意一个值 a求与value 最接近的值。 也就是 |a-value| 绝对值最小的value.比如给的是: 1.5 它最接近的绝对值就是 1.3...想了很久,也不知道什么算法性能最高。。
解决方案 »
- sqlserver,表中的一列,用于自动生成编号,怎么实现?
- 求一条SQL语句
- sql7上生成的备份文件能否恢复到sql2000版的服务器上
- 100分问个sql server基础问题
- 两个表的比较,怎么写sql语句
- 在server 2000取用户建的数据库?
- [ID计数] 如何返回自动计数的Identify列的值。
- 求教:追求完美的数据库高手,下面的存储过程有哪些方面可以改进提高效率?谢谢!!!
- 这边也放分喽!以后不会很多时间来了,分留着没用,需要可用分的就说个数!斑竹留情,我想也许技术区才有人需要可用分!(顺便提升一下人
- 请问哪里有MRP系统开发的文档
- 关于SQL的输出
- with cube 的使用
select [value] from tb where abs(1.5-value)=(select min(abs(1.5-value) from tb)
declare @f float
set @f=1.5
select * from tb where abs(value-@f)=(select min(abs(value-@f)) from tb)
declare @f float
set @f=1.5select * from tb t where not exists(select 1 from tb where abs(value-@f)<abs(t.value-@f))
go
create table [tb]([id] int,[name] varchar(10),[value] dec(9,2))
insert [tb] select 1,'a',1.2
union all select 2,'b',2.2
union all select 3,'c',1.3
union all select 4,'d',1.8
union all select 5,'e',2.1
go
--
--select * from tb
declare @f float
set @f=1.5select top 1 * from tb t where [value]<>@f order by abs(@f-[value])
/*
id name value
----------- ---------- ---------------------------------------
3 c 1.30(1 行受影响)
*/
INSERT @T SELECT 1 , 'a' , 1.2
INSERT @T SELECT 2 , 'b' , 2.2
INSERT @T SELECT 3 , 'c' , 1.3
INSERT @T SELECT 4 , 'd' , 1.8
INSERT @T SELECT 5, 'e' ,2.1
DECLARE @I DEC(10,2)
SET @I=1.5
SELECT * FROM @T ORDER BY ABS(@I-VALUE)
/*id name value
----------- ---------- ------------
3 c 1.30
4 d 1.80
1 a 1.20
5 e 2.10
2 b 2.20(影響 5 個資料列)*/
SELECT TOP 1 VALUE FROM @T ORDER BY ABS(@I-VALUE)
/*VALUE
------------
1.30(影響 1 個資料列)
*/
from t
order by abs(@i-value)
select top 1 *
from LI
order by abs(@input - value)
insert #tb select 1,'a',1.2
union all select 2,'b',2.2
union all select 3,'c',1.3
union all select 4,'d',1.8
union all select 5,'e',2.1
declare @i decimal(19,2)
set @i=1.5
select top 1 * from #tb order by abs(@i-value) asc
不过最简单的还是楼上的
select top 1 * from t order by abs(1.5-value) asc
set @i=1.5
select top 1 * from #tb order by abs(@i-value) asc这个比较好,很容易修改