本帖最后由 qq35610 于 2011-08-21 15:55:37 编辑

解决方案 »

  1.   

    total 列为连续登录的天数,当然判断规则你要用准确的 24 小时来判断的话,用其它的函数即可:
    mysql> select * from tb4;
    +------+-------------------+
    | id   | loginTime         |
    +------+-------------------+
    |    1 | 2011-8-1 14:59:59 |
    |    2 | 2011-8-2 14:58:59 |
    |    3 | 2011-8-3 14:57:59 |
    |    4 | 2011-8-4 14:56:59 |
    |    5 | 2011-8-6 14:55:59 |
    |    6 | 2011-8-7 14:54:59 |
    +------+-------------------+
    6 rows in set (0.00 sec)mysql> set @last := 0;
    Query OK, 0 rows affected (0.00 sec)mysql> set @days := 1;
    Query OK, 0 rows affected (0.00 sec)mysql>  select ifnull(@last, @days := @days + 1), if(dayofyear(loginTime) - dayo
    fyear(@last) = 1, @days := @days + 1, @days := 1) as 'total', @last := loginTime    ->  from tb4;
    +-----------------------------------+-------+--------------------+
    | ifnull(@last, @days := @days + 1) | total | @last := loginTime |
    +-----------------------------------+-------+--------------------+
    |                                 0 |     1 | 2011-8-1 14:59:59  |
    |                              2011 |     2 | 2011-8-2 14:58:59  |
    |                              2011 |     3 | 2011-8-3 14:57:59  |
    |                              2011 |     4 | 2011-8-4 14:56:59  |
    |                              2011 |     1 | 2011-8-6 14:55:59  |
    |                              2011 |     2 | 2011-8-7 14:54:59  |
    +-----------------------------------+-------+--------------------+
    6 rows in set, 1 warning (0.00 sec)mysql>
      

  2.   

    表记录如上,id为自动递增,希望统计出,同一个userid连续的数目的最大值,是否超过了7条,连续的规则是,同一个userid的情况下,上一条记录和下一条记录之间times字段的差值,不超过24小时
    数据库mysql,版本5.1
      

  3.   


    这个考虑到了针对相同userid的符合条件的数目的判断吗?
      

  4.   


    同一个userid连续的数目的最大值,是否超过了7条,连续的规则是,同一个userid的情况下,上一条记录和下一条记录之间times字段的差值,不超过24小时
      

  5.   

    http://www.iteye.com/problems/70397,我已经无语了,看这个吧
      

  6.   

    说明一下你希望这个SQL语句产生的结果是什么样?楼主与其花这么多时间浪费,不如耐心参考一下这个。   参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
      

  7.   

    再说一遍规则,同一个userid连续的数目的最大值,是否超过了7条,连续的规则是,同一个userid的情况下,上一条记录和下一条记录之间times字段的差值,不超过24小时,返回同一个userid连续的数目的最大值就行了
      

  8.   

    id userid times
    1 1 2011-8-1 14:59:59
    2 1 2011-8-2 14:58:59
    3 1 2011-8-3 14:57:59
    4 1 2011-8-4 14:56:59
    5 1 2011-8-6 14:55:59
    6 1 2011-8-7 14:54:59
    7 2 2011-8-6 14:55:59
    8 2 2011-8-7 14:54:59针对上面的数据,最大的连续记录数,应该是
    1 1 2011-8-1 14:59:59
    2 1 2011-8-2 14:58:59
    3 1 2011-8-3 14:57:59
    4 1 2011-8-4 14:56:59
    这四条,所以返回的值应该是4
      

  9.   

    提供一下你的create table / insert into 语句,这样别人可以直接使用你的数据进行测试。
      

  10.   

    SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
    -- Table structure for `t`
    -- ----------------------------
    DROP TABLE IF EXISTS `t`;
    CREATE TABLE `t` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `userid` int(11) NOT NULL,
      `logintime` datetime NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;-- ----------------------------
    -- Records of t
    -- ----------------------------
    INSERT INTO `t` VALUES ('1', '1', '2011-08-01 14:59:59');
    INSERT INTO `t` VALUES ('2', '1', '2011-08-02 14:58:59');
    INSERT INTO `t` VALUES ('3', '1', '2011-08-03 14:57:59');
    INSERT INTO `t` VALUES ('4', '1', '2011-08-04 14:56:59');
    INSERT INTO `t` VALUES ('5', '1', '2011-08-06 14:55:59');
    INSERT INTO `t` VALUES ('6', '1', '2011-08-07 14:54:59');
      

  11.   

    看来让楼主提供点东西是难上加难。你16楼的提供的东西和你项楼的记录根本不一样。 还是得自己准备。提问的都提得这么牛!mysql> select * from qq35610;
    +------+--------+---------------------+
    | id   | userid | times               |
    +------+--------+---------------------+
    |    1 |      1 | 2011-08-01 14:59:59 |
    |    2 |      1 | 2011-08-02 14:58:59 |
    |    3 |      1 | 2011-08-03 14:57:59 |
    |    4 |      1 | 2011-08-04 14:56:59 |
    |    5 |      1 | 2011-08-06 14:55:59 |
    |    6 |      1 | 2011-08-07 14:54:59 |
    |    7 |      2 | 2011-08-06 14:55:59 |
    |    8 |      2 | 2011-08-07 14:54:59 |
    +------+--------+---------------------+
    8 rows in set (0.00 sec)mysql>
    mysql> set @i=0;set @u=0;set @d='1911-08-01';
    Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)mysql> select max(n) from(
        ->  select @i:=if( userid!=@u and times<=@d+interval 24 hour, @i+1,1) as n,@d:=times,@u=userid
        ->  from qq35610
        ->  order by userid,times
        -> ) t;
    +--------+
    | max(n) |
    +--------+
    |      4 |
    +--------+
    1 row in set (0.00 sec)mysql>