一张表table,分别有字段
id   time
-------
1    1231014661
2    1231024661
,其中time是格林威治时间的秒数(即毫秒数除过1000了),
怎么能得到每个整点小时的记录数量呢?该按照什么分组?
select count(*) as num from table group XXX;

解决方案 »

  1.   


    select count(*) as num from table group by (time/3600)
      

  2.   

    上面的有错select count(*) as num from table
    where mod(time,3600)=0
     group by  mod(time,3600)
      

  3.   

    貌似还有错~~
    再发一个
    select count(*) as num from table
    where mod(time,3600)=0
     group by  time/3600
      

  4.   

    LS这个SQL的mod(time,3600)=0是什么意思?过滤出能整除3600的时间然后分组?
    首先我的这个time字段的时间是无规律的,也就是说可能没有一个能被3600整除的,
    比如从今天的0点到24点,其中一共有10000条数据,
    我希望得到从0点到1点之间的记录数总数,1点到2点之间的记录总数,这样的一个列表,最后这24条记录的总数是等于10000的。
      

  5.   

    上面的SQL可能掉了一个时间范围,应该是
    select count(*) as num from table where time>XXX1 and time<XXX2 group by XXX;这样的形式,
    其中XXX1和XXX2的范围不是固定的,有可能是12个小时的秒数,也有可能是13个小时的秒数;
    在线等,分不够再加 
      

  6.   

    上面的时间没说清楚,应该是XXX1和XXX2之间的秒数是N个小时,也就是N*3600秒,而XXX1和XXX2就是格林威治时间的秒数
      

  7.   

    select count(*) as num from table group by to_char(time,'hh24')
      

  8.   

    select count(id) from (select id,trunc(time /3600)hour from table) order by hour
      

  9.   

    select count(id) from test order by trunc(mm/3600)
      

  10.   

    你的问题描述的不够清楚,time字段的秒数是什么,在某一秒还是他能对应一个时间点?
    只有他能确定一个时间点,才有相隔一个小时的概念,光有秒也确定不了时间点啊?
      

  11.   

    关键是我的time字段不是DATE型的,而是number型的,可以代表一个时间点的秒数。
      

  12.   

    是笔误还是什么?光order by 能求出来???
      

  13.   

    1231014661000就是2009-01-04 04:31:01的毫秒数,1231014661就是秒数,我这里有个工具,就是将秒数转成当前时间的,我们库里的时间全部是用的秒数,为的是避免使用时间字段造成数据的不兼容;
    new Date().getTimes();--->1231014661000,1231014661000/1000--->1231014661 == 2009-01-04 04:31:01
      

  14.   

    转成时间就是还原成毫秒给Date类就可以了,这些转换都封装过了,
    现在需求有点变了,不是求记录数,是求ID的SUM了,要按每小时统计该小时内ID的SUM..
      

  15.   

    select sum(id) from test group by trunc(mm/3600)
      

  16.   

    关键要知道你封装过的函数,计算出一小时大概为多少数值哦。再group一下。