假设我有一张这样的桌子
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中也有相同的组( id:9和id:10中的col1值不能分组,因为它有不同的col2值)。
任何帮助都将不胜感激,谢谢!
发布于 2016-01-04 20:54:03
关键思想是获取相邻行的分组标识符。问题是:对于应该分组的行,行的什么特性是常量?
这里有一个:组中的所有行(基于id)在col1或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;注意:这将是很好的工作-足够对少量的数据,但它不是特别好的规模。
https://stackoverflow.com/questions/34599599
复制相似问题