SQL Group By仅在连续的行上

时间:2018-07-20 15:35:21

标签: mysql sql group-by

所以我有一个看起来像这样的表:

SITE      LOWER   UPPER   SIZE
a.com     0.1     0.2     10
a.com     0.2     0.3     10
a.com     0.3     0.4     10
a.com     0.7     0.8     10
a.com     0.9     1.0     10
b.com     0.1     0.2     20
a.com     0.6     0.7     30

我想要的输出是:

SITE      LOWER   UPPER   SIZE
a.com     0.1     0.4     10
a.com     0.7     1.0     10
b.com     0.1     0.2     20
a.com     0.6     0.7     30

因此,对于SITESIZE对,我需要压缩LOWERUPPER值,其中按行分组的LOWER是最小的第一行和UPPER是最后一行的最大值。LOWERUPPER就像某些存储桶的上下限值(例如[0.1,0.2]),我只需要连续的桶将被压缩在一起。在这方面的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以使用变量将组ID分配给相邻的行:

.nav-tabs li.active  a{
  display: block;
  background-color: tomato !important;
}

然后您可以汇总以获得所需的内容:

select t.*,
        (@grp := IF(@sru = CONCAT_WS(':', site, rev, lower), 
                    IF(@sru := CONCAT_WS(':', site, rev, upper), @grp, @grp),
                    IF(@sru := CONCAT_WS(':', site, rev, upper) , @grp + 1, @grp + 1)
                   )
            ) as grp
from (select t.*
      from t
      order by site, size, lower
     ) cross join
     (select @grp := 0, @sru := '') params;

Here是一个SQL提琴。