这个好象比较简单。不知道你的日期是用什么表示的,也不清楚你要什么样的结果集。以下是我模拟的一个例子,我给出表结构、数据、SQL语句、执行结果。
create table ForElevener
(
  user_id           integer,
  start_time        number(6),
  end_tiem          number(6)
);insert into ForElevener values(1, 092310, 130402);
insert into ForElevener values(2, 100120, 121402);
insert into ForElevener values(3, 122312, 125422);
insert into ForElevener values(4, 122312, 163414);
insert into ForElevener values(5, 142534, 210454);select 
  (select count(user_id) from ForElevener where 090000 between start_time and end_tiem) as "9",
  (select count(user_id) from ForElevener where 100000 between start_time and end_tiem) as "10",
  (select count(user_id) from ForElevener where 110000 between start_time and end_tiem) as "11",
  (select count(user_id) from ForElevener where 120000 between start_time and end_tiem) as "12",
  (select count(user_id) from ForElevener where 130000 between start_time and end_tiem) as "13",
  (select count(user_id) from ForElevener where 140000 between start_time and end_tiem) as "14",
  (select count(user_id) from ForElevener where 150000 between start_time and end_tiem) as "15",
  (select count(user_id) from ForElevener where 160000 between start_time and end_tiem) as "16",
  (select count(user_id) from ForElevener where 170000 between start_time and end_tiem) as "17",
  (select count(user_id) from ForElevener where 180000 between start_time and end_tiem) as "18",
  (select count(user_id) from ForElevener where 190000 between start_time and end_tiem) as "19",
  (select count(user_id) from ForElevener where 200000 between start_time and end_tiem) as "20",
  (select count(user_id) from ForElevener where 210000 between start_time and end_tiem) as "21",
  (select count(user_id) from ForElevener where 220000 between start_time and end_tiem) as "22"
from dual;执行结果
         9         10         11         12         13         14         15         16         17         18         19         20         21         22
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
         0          1          2          2          2          1          2          2          1          1          1          1          1          0
上面我省略了几个时间点。注意,如果要[判断0点的话,时间中应该包含日期信息。
我在做例子时为了简单起见,使用整数来表示时间。格式为HH24MISS,没有包含日期信息。

解决方案 »

  1.   

    这么长的sql有点别扭;按时段统计人数好象也不是很好写?多谢 seafer(大旗) !
      

  2.   

    seafer(大旗) 的语句可以改为cursor,递增的表达式,这要简洁一些。
      

  3.   

    应该有更好的办法,我昨天有个语句也是象 seafer(大旗) 那样写的,感觉很累。谁有了更好的方法告诉,谢谢
      [email protected]
      

  4.   

    select count(userId) from table where startTime>=to_date('2004-03-30 00:00:00','yyyy-mm-dd hh24:mi:ss') and startTime<to_date('2004-03-30 01:00:00','yyyy-mm-dd hh24:mi:ss')
    这就是零点的在线用户数,很简单了