我的问题有点难以表述,我希望以前没有被问过。 我想通过传递给 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 但没有成功,我无法像我的示例中那样获得我所期望的结果。
您可以添加另一列以在每行中包含范围吗?这会让事情变得更容易。
这道题可以理解为找到第一个大于等于
height
的x
吗?
select code from example_table where height >=x order by height asc limit 1