如何查询最接近某个数值的记录(求)

WindowsX 2017-08-29 10:08:26
比如,有一个表如下:
ID valueType1 valueType2
19 90 ABC
25 80 DEF
66 70 GHI
95 60 JKL
...

现在有一个数值 score = 86 ,如何能把数据库上面表中ID为25的数据【DEF】拿出来?

谢谢
...全文
808 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
doloopcn 2017-09-02
  • 打赏
  • 举报
回复
是一个MIN函数 Select valuetype2 From YourTable Where (86-valuetype1) in (Select Min(86-valuetype1) From YourTable) 返回记录数可能大于1
wdonghai 2017-08-29
  • 打赏
  • 举报
回复
ID valueType1 valueType2 MinValue MaxValue 19 90 ABC 90 99 25 80 DEF 80 89 66 70 GHI 70 79 95 60 JKL 60 69 加多两列MinValue和MaxValue,查询条件就变成了score>=MinValue and score<MaxValue
WindowsX 2017-08-29
  • 打赏
  • 举报
回复
引用 2 楼 mrwyf 的回复:
用abs函数,假设你的表名是TEST,如: SELECT valueType2 FROM TEST WHERE ABS(valueType1-86)=(SELECT MIN(ABS(valueType1-86)) FROM TEST)
非常感谢。试了一下。得到的却是 “ABC” 。 对不起,是我的错,忘记讲了,条件还有一个,score 要大于等于 rs[valueType1]
流星飞520 2017-08-29
  • 打赏
  • 举报
回复
用abs函数,假设你的表名是TEST,如: SELECT valueType2 FROM TEST WHERE ABS(valueType1-86)=(SELECT MIN(ABS(valueType1-86)) FROM TEST)
流星飞520 2017-08-29
  • 打赏
  • 举报
回复
用abs函数,假设你的表名是TEST,如: SELECT * FROM TEST WHERE ABS(value-86)=(SELECT MIN(ABS(value-86)) FROM TEST)
WindowsX 2017-08-29
  • 打赏
  • 举报
回复
引用 3 楼 WindowsX 的回复:
[quote=引用 2 楼 mrwyf 的回复:] 用abs函数,假设你的表名是TEST,如: SELECT valueType2 FROM TEST WHERE ABS(valueType1-86)=(SELECT MIN(ABS(valueType1-86)) FROM TEST)
非常感谢。试了一下。得到的却是 “ABC” 。 对不起,是我的错,忘记讲了,条件还有一个,score 要大于等于 rs[valueType1] [/quote] 结帖! 最终查询应该是这样:

SELECT valueType2 FROM TEST
WHERE ABS(valueType1-86)=(SELECT MIN(ABS(valueType1-86)) FROM TEST where valueType1 < 86)

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧