gpt4 book ai didi

mysql - 在同一个表中查找每行最接近的值

转载 作者:行者123 更新时间:2023-11-29 06:40:35 25 4
gpt4 key购买 nike

假设我从“表 a”开始

+-----------+
|iD | Value |
|-----------|
| 0 | 1 |
| 1 | 5 |
| 2 | 6 |
| 3 | 8 |
+-----------+

然后我想创建一个 SQL 查询来显示 iD、值、数值上最接近当前值的值以及这些值之间的差异,例如

+-----------+------------+------------+
|iD | Value | closestVal | Difference |
|-----------|------------|------------+
| 0 | 1 | 5 | 4 |
| 1 | 5 | 6 | 1 |
| 2 | 6 | 5 | 1 |
| 3 | 8 | 6 | 2 |
+-----------+------------+------------+

根据研究,我认为它可能包括使用 ABS(a.Value - b.Value) 的东西,假设负数是可能的,尽管我不确定当前行和比较行的引用到底如何处理以及一个值的输出,而不是每次比较的值表。

我该怎么做呢?任何帮助将不胜感激

最佳答案

我认为最简单的方法是使用相关子查询:

select t.*, abs(closestvalue - value) as difference
from (select t.*,
(select t2.value
from tablea t2
order by abs(t2.value - t.value) asc
limit 1
) as closestvalue
from tablea t
) t;

您也可以通过显式join 执行此操作,但逻辑有点奇怪:

select a.id, a.value,
(case when min(case when a.value > a1.value then a.value - a1.value end) = min(abs(a.value - a1.value))
then a.value - min(abs(a.value - a1.value))
else a.value + min(abs(a.value - a1.value))
end) as closestvalue
min(abs(a.value - a1.value)) as difference
from tablea a join
tablea a1
on a.id <> a1.id
group by a.id;

使用这种方法,通过使用 min(abs()) 很容易找到差异。然后问题是弄清楚最接近的值是大于还是小于该值。此处的逻辑使用条件聚合并将这些结果与实际最小值进行比较来计算。

关于mysql - 在同一个表中查找每行最接近的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21803853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com