我有一张表:用户ID、上线时间、下线时间
    需求:知道每个小时段(0-1、1-2...23-24)里同时在线用户最多时有多少人。
    求大侠帮忙整理下逻辑先后顺序,有代码段最好。弄了一天了。

解决方案 »

  1.   

    这里有句查询是我用来查询时间段里上线用户数量,可以达到上图的格式要求,是以人为基础显示结果的,所以不是每个时间段都显示,有人才显示的
    SELECT 
    FROM_UNIXTIME(start_time, '%H'), DATE_FORMAT(TIMESTAMPADD(MINUTE,1, FROM_UNIXTIME(start_time, '%y-%m-%d-%H')), '%H'), COUNT(DISTINCT userid) AS 'num' 
    FROM playerszxtj 
    WHERE 
    FROM_UNIXTIME(start_time,'%y-%m-%d') = DATE_FORMAT('2013-06-24', '%y-%m-%d') 
    AND 
    FROM_UNIXTIME(start_time,'%H') > 0 
    AND 
    FROM_UNIXTIME(start_time, '%H') < 24 GROUP BY FROM_UNIXTIME(start_time,'%H')
      

  2.   

    那你这样我上线我又马上下线,我再上线,那这样你算不算?如果算的话可以用count函数也解决!
      

  3.   


    这个我不是直接贴了张表格么哪个时间段有人,数据库是我本地的没多少数据的。
    还有5楼说的情况是不会发生的,5楼没理解同时在线....不管你怎么上下线,你都不可能和自己同时在线...
    而且可以用COUNT(DISTINCT userid)这样也不会把自己算2次
      

  4.   

    建议想办法编造一些测试数据,这样容易让别人明白。   建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式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)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。