基于两列的相邻行分组

时间:2016-01-04 20:50:30

标签: mysql sql database

我们说我有这样一张桌子:

id     col1    col2
---------------------
 1      35      A
 2      40      B
 3      39      B
 4      39      B
 5      39      B
 6      40      B
 7      39      B
 8      39      B
 9      40      B
10      40      C
11      35      C

如何制作它,使其具有如下结果:

id     col1    col2
---------------------
 1      35      A
 2      40      B
 3      39      B
 6      40      B
 7      39      B
 9      40      B
10      40      C
11      35      C

我希望group by col1在相邻行中具有相同的值,同时在col2 col1中的id:9id:10和{{ 1}}无法分组,因为它具有不同的col2值)

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:2)

关键思想是获取相邻行的分组标识符。问题是:对于应该组合在一起的行,行的哪些特性是常量?

嗯,这里有一个:idcol1中具有不同值的前一行(基于col2)对于组中的所有行都是相同的。

您可以将此观察值转换为每行的度量(使用相关子查询)。其余的只是聚合:

select min(id) as id col1, col2, count(*) as NumInGroup
from (select t.*,
             (select count(*)
              from t t2
              where t2.id < t.id and (t2.col1 <> t.col1 or t2.col2 <> t.col2)
             ) as grp
      from t
     ) t
group by grp, col1, col2;

注意:这对少量数据运行良好,但不能很好地扩展。

相关问题