所以我不知道这是否可行,但我想将具有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)
这有可能吗?
不容易.既然你在同一条记录中将它们作为不同的字段,那么你将不得不使用非常难看的查询:
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业务并仅保留外部父查询.
| 归档时间: |
|
| 查看次数: |
39 次 |
| 最近记录: |