MySQL:获取最大连续出现次数

标签 mysql

您好,我在 mysql 数据库上有下表。

USER_ID SCORE
5   0
5   1
5   1
5   1
5   1
5   1
5   1
5   0
5   0
5   0
5   1
5   1
5   1
5   0
5   0
5   1
5   1
5   0
5   0

此数据中的预期结果最高分是 6。

我将如何获得它?

最佳答案

以下查询可能会完成这项工作:

    SELECT
    MAX(max_occurence_tracker)
    FROM
    (
        SELECT
            *,
            IF (@prev = score ,@c := @c + 1,@c := 0 ) max_occurence_tracker,
            @prev := score
        FROM otable,(SELECT @prev := - 1 ,@c := 1) var
    ) t;

注意:我将表名用作otable

警告:如果您的表中有主键,则在该主键 字段上使用排序依据。否则你可能会得到随机行为。

无法添加 SQL FIDDLE。 所以这里有一些测试数据。您可以检查查询:

DROP TABLE IF EXISTS `otable`;
CREATE TABLE `otable` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `score` int(11) NOT NULL,
  PRIMARY KEY (`id`)
);
INSERT INTO `otable` VALUES ('1', '5', '0');
INSERT INTO `otable` VALUES ('2', '0', '1');
INSERT INTO `otable` VALUES ('3', '0', '1');
INSERT INTO `otable` VALUES ('4', '0', '1');
INSERT INTO `otable` VALUES ('5', '0', '1');
INSERT INTO `otable` VALUES ('6', '0', '1');
INSERT INTO `otable` VALUES ('7', '0', '1');
INSERT INTO `otable` VALUES ('8', '0', '0');
INSERT INTO `otable` VALUES ('9', '5', '0');

关于MySQL:获取最大连续出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36418885/

相关文章:

php - 使用PHP从SQL数据库显示重复日期

php - NodeJS 比 PHP 慢很多?

php - 特殊字符替换为?

mysql - 如何根据另一个表的值更新一个表的所有行?

mysql - 为 ipv6 子网授予对 mysql 的远程访问权限

php - 将用户输入的标题与类别匹配 - 大型 INNODB 数据库

mysql - 如何选择一个表然后加入另一个表mysql

MySQL - 为每个人启用安全更新

php - MySQL/PHP - 计算列中单词的出现次数

php - Codeigniter 中缺少参数让我发疯