所以我不知道这是否可行,但我想将具有closet值的列的名称返回给我的查询。
所以这是我的表:
--------------------------
| ID | D1 | D2 | D3 | D4 |
--------------------------
| 1 | 0 | 10 | 22 | 50 |
--------------------------
我想查询我在D1到D4中搜索最接近的值20,在这种情况下D3
然后我想返回D3及其中的值。
所以我的答案应该是:
------
| D3 |
------
| 22 |
------
这有可能吗?
答案 0 :(得分:5)
不容易。由于你在同一条记录中将它们作为不同的字段,你将不得不使用非常难看的查询:
SELECT source, val, ABS(20 - val) AS diff
FROM (
SELECT 'd1' AS source, d1 AS val FROM foo
UNION ALL
SELECT 'd2', d2 FROM foo
UNION ALL
SELECT 'd3', d3 FROM foo
UNION ALL
SELECT 'd4', d4 FROM foo
) AS child
ORDER BY diff DESC
LIMIT 1
你应该normalize你的表,它完全消除了整个union
业务,只留下外部父查询。
答案 1 :(得分:-2)
查看http://www.techfounder.net/2009/02/02/selecting-closest-values-in-mysql/
之类的内容您使用什么语言来回显数据?