建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
   参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382
   
   1. 你的 create table xxx .. 语句
   2. 你的 insert into xxx ... 语句
   3. 结果是什么样,(并给以简单的算法描述)
   4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
   
   这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

解决方案 »

  1.   

    CREATE TABLE Account 
    (ID INT(10) NOT NULL AUTO_INCREMENT COMMENT '账户ID', 
    AccountName VARCHAR(100) NOT NULL COMMENT '账户名', 
    EMail VARCHAR(100) NOT NULL COMMENT '邮箱地址', 
    PASSWORD VARCHAR(100) NOT NULL COMMENT '账户密码', 
    Sex INT(10) DEFAULT 0 COMMENT '性别 0--男,1--女', 
    Address VARCHAR(100) COMMENT '地址', 
    UserPhoto VARCHAR(100) COMMENT '账户头像', 
    STATUS INT(10) DEFAULT 0 NOT NULL COMMENT '账户状态 0--激活,1--冻结', 
    CreateTime DATE NOT NULL COMMENT '创建时间', PRIMARY KEY (ID)) COMMENT='账户表';
    统计用户注册量,当没有时间条件或时间条件小于一天时,查询24小时,以小时为单位查询 用户注册量。当时间条件大于一天,统计每一天的用户注册量要得到这样的数据:
    第一种情况。无时间条件或时间条件小于一天小时    注册量
    0               2
    1               3
    2               0
    3               4
    ...              ...
    24             5当时间条件大于一天:选择2014-06-01  到2014-06-05时间          注册量
    2014-06-01         a1
    2014-06-02         a2
    2014-06-03         a3
    2014-06-04         a4
    2014-06-05         a5
      

  2.   

    第一种情况:
    select hour(CreateTime),count(1) from Account group by hour(CreateTime) order by hour(CreateTime);第二种情况:
    select date(CreateTime),count(1) from Account where CreateTime>'2014-06-01' and CreateTime<DATE_ADD('2014-06-05',INTERVAL 1 DAY) group by date(CreateTime) order by date(CreateTime);
      

  3.   

    回复lisong526: 感谢您的回复.您可能理解错误了,第一种情况统计某一天24小时,24个时间段用户的注册量。0-23小时SELECT HOUR(CreateTime),COUNT(id) FROM Account GROUP BY HOUR(CreateTime) ORDER BY HOUR(CreateTime);查询的是所有注册用户注册的时间点统计SELECT DATE(CreateTime),COUNT(id) FROM Account WHERE CreateTime>'2014-06-01' AND CreateTime<DATE_ADD('2014-06-05',INTERVAL 1 DAY) GROUP BY DATE(CreateTime) ORDER BY DATE(CreateTime);查询出来的结果只有显示某天有注册的信息,如果2014-06-02没有用户注册。则没有信息。
      

  4.   

    有无时间条件应该是在程序代码中进行判断,然后执行对应的SQL语句。如果需要显示为0 的统计,则方法一:使用辅助表, 1,2,3,4...23和另外一个日期表,然后做LEFT JOIN。
    方法二,在程序中进行控制,把没有记录补充0后显示出来 。
      

  5.   


    要建两张辅助表?能不能写明白点?谢谢  之前考虑过建个时间表,考虑到查询天数,统计一个月的注册数量又有问题。 不能通过SQL语句来输出想要的结果?
      

  6.   

    求大神帮忙
       第一个条件数据已解决。
       第二个条件,选择大于一天的时间,统计以天为单位,注册用户量。怎么弄?
       当时间条件大于一天:如选择2014-06-01  到2014-06-05时间          注册量
    2014-06-01         a1
     2014-06-02         a2
     2014-06-03         a3
     2014-06-04         a4
     2014-06-05         a5注,月份天数不固定 28,30,31 都有可能。
      

  7.   

    如果不考虑有 a4=0 的情况,那直接 group by 就行了。