【问题标题】:SQL Group By on consecutive rows onlySQL Group By 仅在连续行上
【发布时间】:2018-07-20 15:35:20
【问题描述】:

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

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]),我只需要将连续的桶压缩在一起。在这方面的任何帮助将不胜感激。

【问题讨论】:

  • 请用 MySQL 的版本标记您的问题。

标签: mysql sql group-by


【解决方案1】:

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

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;

然后你可以聚合得到你想要的:

select site, size, min(lower) as lower, max(upper) as upper
from (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
     ) t
group by size, size, grp;

Here 是一个 SQL Fiddle。

【讨论】:

  • 前几天我尝试了您的解决方案,效果很好。现在我在这里再次尝试:sqlfiddle.com/#!9/9dfed4/1 它只是返回所有行而不是组合在一起。你能帮我解决这个问题吗?
  • @ahajib 。 . .这比我一开始想的要棘手。存储分组信息的变量(以前是@ssu,现在是@sru)每次通过都需要调整到新的上限。
猜你喜欢
  • 1970-01-01
  • 2021-11-20
  • 2010-11-11
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多