数据库的创建语句如下:
DROP TABLE "PERSON" CASCADE CONSTRAINTS;/*==============================================================*/
/* Table: "PERSON"                                              */
/*==============================================================*/
CREATE TABLE "PERSON"  (
   "ID"                 INT                             not null,
   "USERNAME"           varchar2(20)                    not null,
   "PASSWORD"           varchar2(20)                    not null,
   "REGISTERTIME"       DATE                            not null,
   constraint PK_PERSON primary key ("ID")
);
插入测试数据:
begin
   for k in 1..100 loop 
      insert into person(id,username,password,registertime) values('10010'||k,'abc'||k,'000000',to_date('2008-07-17 11:00:00','YYYY-MM-DD HH24:MI:SS'));
   end loop; 
end;
/
begin
   for k in 1..100 loop 
      insert into person(id,username,password,registertime) values('10011'||k,'abc'||k,'000000',to_date('2008-07-17 12:00:00','YYYY-MM-DD HH24:MI:SS'));
   end loop; 
end;根据里面的数据,要做如下统计:
1.查询统计出每个月的每一天的每个时间段的注册人数(现定为每隔一小时统计一次);
2.动态输入时间段长度统计。
写入相应的SQL语句,谢谢!

解决方案 »

  1.   

    select trunc(REGISTERTIME) rq,substr(to_char(REGISTERTIME, 'yyyy-mm-dd hh'),12,2) hour,count(*) 注册人数
    from PERSON
    where REGISTERTIME between :begdate and :enddate
    group by trunc(REGISTERTIME),substr(to_char(REGISTERTIME, 'yyyy-mm-dd hh'),12,2);
      

  2.   

    能否说明白点,谢谢,如果我需要每隔两个小时统计一次呢,望楼上的说明白点,这个SQL我是不是很明白意思。
      

  3.   

    substr(to_char(REGISTERTIME, 'yyyy-mm-dd hh'),12,2)
    那需要这么麻烦啊to_char(REGISTERTIME,'HH24')
    就是小时数
      

  4.   

    两小时统计一次trunc(to_number(to_char(REGISTERTIME,'HH24'))/2)
    就是两小时一次
      

  5.   

    select trunc(REGISTERTIME) rq,substr(to_char(REGISTERTIME, 'yyyy-mm-dd hh'),12,2) hour,count(*) 注册人数
    from PERSON
    where REGISTERTIME between to_date('2008-07-17 10:00:00','YYYY-MM-DD HH24:MI:SS') 
                           and to_date('2008-07-19 16:00:00','YYYY-MM-DD HH24:MI:SS')
    group by trunc(REGISTERTIME),substr(to_char(REGISTERTIME, 'yyyy-mm-dd hh'),12,2);
    刚才试了一下,只能是每小时统计一次,我现在需要自定义一个时间,能否统计出来呢?又该怎么写呢
      

  6.   

    你固定的每几个小时段好做trunc(to_number(to_char(REGISTERTIME,'HH24'))/2(固定时间段,如2小时就写2,3小时就写3)) 
      

  7.   

    问题还是没能解决,能写一条完整的SQL给我吗,谢谢!
      

  8.   

    每天,按两小时统计一次SELECT   TRUNC (registertime) rq,
             TRUNC (TO_NUMBER (TO_CHAR (registertime, 'HH24')) / 2) HOUR,
             COUNT (*) 注册人数
        FROM person
       WHERE registertime BETWEEN :begdate AND :enddate
    GROUP BY TRUNC (registertime),
             TRUNC (TO_NUMBER (TO_CHAR (registertime, 'HH24')) / 2);
      

  9.   

    谢谢!已差不多解决了!主要还是不太明白意思,谢谢hebo2005的耐心解答.
      

  10.   

    TO_CHAR (registertime, 'HH24')
    这个函数是取出DATE型数据的小时部分
    后面参数hh24就是小时
    如果改成yyyy就是年
    mm月
    DD日
    MI分钟
    SS秒取出小时后,用to_number转换成数字
    然后除2,再用trunc取整
    比如0点,出来就是0
    1点,出来也是0
    2点,出来是1
    3点出来是1
    (1/2=0.5,trunc后就是0)