有以下表记录
id  times
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需要统计出,符合时间间隔小于24小时的记录共有多少条

解决方案 »

  1.   

    什么是“符合时间间隔小于24小时的记录”? 比如第5条记录和第一条记录的时间间隔肯定超过24小时。 (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  2.   


    抱歉没说的清楚点,这个sql语句为了统计出,用户连续登陆了几天
      

  3.   


    id相同,时间连续,连续是指,同一个id的情况下,上一条记录和下一条记录的之间的差值为24小时,或者说86400秒
      

  4.   

    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
    这样表述比较清晰
      

  5.   


    表规则见10楼,我希望统计出,同一个userid连续登录的数目的最大值,是否超过了7条,也就是一个星期
      

  6.   

    同一个ID?还是同一USERID? 另外ID是否连续?
      

  7.   

    如下查询可以查出最大的连续登录天数(注意,没排除跨年的情况,可以自己加判断):
    set @last := 0;
    set @days := 1;
    select max(total)
    from
    (
    select ifnull(@last, @days := @days + 1), if(dayofyear(loginTime) - dayofyear(@last) = 1, @days := @days + 1, @days := 1) as 'total', @last := loginTime
    from tb4
    ) as t
      

  8.   

    子查询用于查询每一天连续登录了多少天(total列):
    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>