关闭'关闭的SQL组号码一起使用阈值

时间:2014-07-25 16:19:05

标签: sql

考虑一下表:

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

1 个答案:

答案 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

SQLFiddle

<强>更新

以下是使用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

SQLFiddle