当前位置: 首页 > 面试题库 >

如何在MySQL中进行连续分组?

焦光霁
2023-03-14
问题内容

我如何返回在MySQL中实际上是“连续的” GROUP BY。换句话说,GROUP BY是否尊重记录集的顺序?

例如,SELECT MIN(col1), col2, COUNT(*) FROM table GROUP BY col2 ORDER BY col1从下表中,col1是唯一的有序索引

1个
2个
3分
4例
5个
6个

返回:

1一4
3 b 2

但我需要返回以下内容:

1一2
3 b 2
5 2

问题答案:

采用:

   SELECT MIN(t.id) 'mi', 
          t.val, 
          COUNT(*)
     FROM (SELECT x.id, 
                 x.val, 
                 CASE 
                   WHEN xt.val IS NULL OR xt.val != x.val THEN 
                     @rownum := @rownum+1 
                   ELSE 
                     @rownum 
                 END AS grp
            FROM TABLE x
            JOIN (SELECT @rownum := 0) r
       LEFT JOIN (SELECT t.id +1 'id',
                         t.val
                    FROM TABLE t) xt ON xt.id = x.id) t
 GROUP BY t.val, t.grp
 ORDER BY mi

这里的关键是创建一个允许分组的人为值。

以前,更正了Guffa的答案:

   SELECT t.id, t.val
     FROM TABLE t
LEFT JOIN TABLE t2 on t2.id + 1 = t.id
    WHERE t2.val IS NULL 
       OR t.val <> t2.val


 类似资料:
  • 问题内容: 如何返回在MySQL中实际上是“连续的” GROUP BY的内容。换句话说,GROUP BY是否尊重记录集的顺序? 例如,从下表中,col1是唯一的有序索引: 返回: 但我需要返回以下内容: 问题答案: 使用: 这里的关键是创建一个允许分组的人为值。 以前,更正了Guffa的答案:

  • 问题内容: 我有一个包含类别,日期和费率的表。每个类别在不同日期可以具有不同的费率,一个类别在给定日期只能具有一个费率。 唯一索引(类别,日期,费率)我希望针对每个类别将所有连续的日期范围归为一组,并仅保留范围的开始和结束。对于前面的示例,我们将有: 我在论坛中找到了一个类似的解决方案,但并未完全给出结果 请参见SQL FIDDLE 如何在mysql中做同样的事情?请帮忙! 问题答案: MySQL

  • 问题内容: 所以,我有一张表,上面有这样的行: 每次扫描警报时(即每次触发或清除警报时)都会添加“已扫描的警报”行。任何警报都会添加带有特定Ev_Custom1的行。第一列Ev_Message包含一个计算机ID,该ID使我可以将警报与其他计算机分开。(您不喜欢任意的列名吗?)超过900条独特的警报消息。 我希望查询返回的内容是这样的: 这将是两个日期之间过滤的查询。我可以更改进入表的数据,但是有9

  • 问题内容: 我在DataFrame中有一列带有值: 如何将它们这样分组? 问题答案: 你可以groupby通过自定义使用:

  • 我想做的是利用我对连续负二项分布进行抽样的事实,这是得到头部所需要的试验数的分布,也就是说,如果f(X)是这个分布,那么f(X)给出了在我们遇到头部之前有X个尾部的概率,其中X不必是整数。如果我能对这个分布进行采样,那么我能做的就是,如果X是尾部的数量,那么我就能看到X是大于还是小于信用的数量;如果大于,那么我们用完所有的学分,但什么也没有发生,如果小于或等于,那么好事发生了,我们从学分的数目中减

  • 问题内容: 所以我有这张桌子。它有几百行。每行中都有一个日期时间字段。我需要完成的是获取给定时间段内有多少行,而不是整个时间段,而是该时间段的每一天。到此为止,我知道该怎么办。但是,此外,我还需要在表中没有值0的日期的行。 因此,例如: 应该给我这样的结果: 任何人都可以帮忙吗? 问题答案: 为了处理带有0条对应记录的日期,我的常规做法是使用日历表进行联接。 例如,创建一个表,其中一个字段称为,并