gpt4 book ai didi

SQL group by 如果值接近

转载 作者:行者123 更新时间:2023-12-02 17:41:21 25 4
gpt4 key购买 nike

Class| Value
-------------
A | 1
A | 2
A | 3
A | 10
B | 1

我不确定使用 SQL 实现此目的是否可行。如果值的差异小于 5(或 x),则对行进行分组(当然是同一个 Class)

预期结果

Class| ValueMin | ValueMax
---------------------------
A | 1 | 3
A | 10 | 10
B | 1 | 1

对于固定间隔,我们可以很容易地使用“GROUP BY”。但现在分组是基于附近行的值。因此,如果值是连续的或非常接近,它们将“链接在一起”。

非常感谢

假设 MSSQL

最佳答案

您正在尝试根据值之间的差距对事物进行分组。最简单的方法是使用 lag() 函数来查找间隙:

select class, min(value) as minvalue, max(value) as maxvalue
from (select class, value,
sum(IsNewGroup) over (partition by class order by value) as GroupId
from (select class, value,
(case when lag(value) over (partition by class order by value) > value - 5
then 0 else 1
end) as IsNewGroup
from t
) t
) t
group by class, groupid;

请注意,这假定使用 SQL Server 2012 来使用 lag() 和累积总和。

关于SQL group by 如果值接近,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20403083/

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