考虑一下表:
id value
1 2
2 4
3 6
4 9
5 10
6 12
7 19
8 20
9 22
我想按阈值对它们进行分组,以便找到“关闭”的值。一起。 为此,我想要另一个将这些数字组合在一起的列。对于此示例,使用2作为 阈。结果应该是这样的。只是用什么作为组标签并不重要 只要以后可以轻松查询。
id value group_label
1 2 A
2 4 A
3 6 A
4 9 B
5 10 B
6 12 B
7 19 C
8 20 C
9 22 C
答案 0 :(得分:3)
我无法使用lag()
来使用该版本,但这是使用变量的mysql查询
select id, value,
(case
when (value - @value) > 2
then @groupLabel := @groupLabel + 1
else @groupLabel
end) groupLabel, @value := value
from data cross join (
select @value := -1, @groupLabel := 0
) t1
order by value
<强>更新强>
以下是使用lag
select t1.id, t1.value, count(t2.id)
from data t1 left join (
select id, value,
case when
(value - lag(value) over (order by value)) > 2
then 1 else 0
end groupLabel
from data
) t2 on t2.groupLabel = 1
and t2.id <= t1.id
group by t1.id, t1.value
order by t1.value