返回具有最接近值的列名称

时间:2015-08-14 15:07:13

标签: mysql sql sqlite

所以我不知道这是否可行,但我想将具有closet值的列的名称返回给我的查询。

所以这是我的表:

--------------------------
| ID | D1 | D2 | D3 | D4 |
--------------------------
| 1  | 0  | 10 | 22 | 50 |
--------------------------

我想查询我在D1到D4中搜索最接近的值20,在这种情况下D3

然后我想返回D3及其中的值。

所以我的答案应该是:

------
| D3 |
------
| 22 |
------

这有可能吗?

2 个答案:

答案 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/

之类的内容

您使用什么语言来回显数据?