MYSQL - 如何为表行中特定字段中指定的间隔之间包含的值选择单行?

问题描述 投票:0回答:2

我的问题有点难以表述,我希望以前没有被问过。 我想通过传递给 SELECT 的输入值选择表的一行(或该行的单个字段“代码”);

类似:

SELECT `code` FROM `example_table` WHERE .... "input"

基本上我想选择“输入”大于前一个“高度”字段中包含的值但不大于下一个字段的位置。 用于检查“高度”的“输入”可以是小数或整数;

这是示例表:

example_table
+----+----------+----+
| id | height | code |
+----+----------+----+
|  1 |      0 |  3.2 |
|  2 |      6 |  5.5 |
|  3 |     13 |  7.4 |
|  4 |     23 | 11.3 |
|  5 |     49 | 16.6 |
|  6 |     77 | 19.4 |
|  7 |     98 | 21.5 |
|  8 |    105 | 22.8 |
|  9 |    132 | 38.1 |
| 10 |    165 | 40.5 |
+----+--------+------+
CREATE TABLE `example_table` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `height` INT(3) NOT NULL DEFAULT '0',
  `code` DECIMAL(6,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
AUTO_INCREMENT=1;

我尝试通过 WHERE 将“输入”传递给 SELECT 但没有运气。在以下示例中,“res”或“结果”是查询的输出,并且应包含存储在“code”字段中的值。

如果输入 = 0,结果必须为 3.2 [高度为 0]

输入 = 5.47 / res 5.5 [5.47 大于 0 但小于 'height'(6)]

输入 = 5.99 / res 5.5 [5.99 大于 0 但小于 'height'(6)]

input = 6 / res 5.5 [6 大于 0 且等于 'height'(6)]

输入 = 6.1 / res 7.4 [6.1 大于 0 和 6 但小于 'height'(13)]

输入 = 48.9 / res 16.6 [48.9 大于 0 和 6 以及 13 和 23 但小于 'height'(49)]

输入 = 49 / res 16.6 [49 大于 0 和 6 以及 13 和 23 并且等于 'height'(49)]

输入 = 49.1 / res 19.4 [49.1 大于 0、6、13、23 和 49,但小于 'height'(77)]

......

......

输入 = 78 / res 21.5 [78 大于 0、6、13、23、49 和 77,但小于 'height'(98)]

输入 = 165 / res 40.5 [165 大于 0, 6, 13, 23, 49, 77, 98, 105, 132 且等于 'height'(165)]

输入 = 165.1 / res 40.5 [165.1 大于 0、6、13、23、49、77、98、105、132 和 165]


如何编写 SELECT 来获取它?

我已经尝试了很多 SELECT 但没有成功,我无法像我的示例中那样获得我所期望的结果。

mysql select
2个回答
0
投票

您可以添加另一列以在每行中包含范围吗?这会让事情变得更容易。


0
投票

这道题可以理解为找到第一个大于等于

height
x
吗?

select code from example_table where height >=x order by  height asc limit 1
© www.soinside.com 2019 - 2024. All rights reserved.