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

Bon*_*usK 1 mysql sql sqlite

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

所以这是我的表:

--------------------------
| ID | D1 | D2 | D3 | D4 |
--------------------------
| 1  | 0  | 10 | 22 | 50 |
--------------------------
Run Code Online (Sandbox Code Playgroud)

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

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

所以我的答案应该是:

------
| D3 |
------
| 22 |
------
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

Mar*_*c B 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
Run Code Online (Sandbox Code Playgroud)

您应该规范化您的表,这将完全消除整个union业务并仅保留外部父查询.