小弟有如下表结构,现要统计实现如下结果的功能,在表结构下方。ID           NUMBER(18) N PK: SEQ_BROWSE_LOGIN
BROWSE_ AMOUNT  NUMBER          N
LOGIN_AMOUNT  NUMBER          N
USER_TYPE           NUMBER(1)        N 1、 管局用户
                                              2、 前置用户
                                              3、 接入商
ISPID           NUMBER(18) Y FK:YHGL_BADWXX(ID)
RECORDTIME  DATE          N ----------------------显示结果----------------------昨日数据 一个周平均 一个月平均 三个月平均 变化趋势
810 420           331            355           10.9%
请教各位高手,这种功能要如何实现呢?

解决方案 »

  1.   

    oracle 实现按周,月,季度,年查询统计数据//按自然周统计 
    select to_char(date,'iw'),sum() 
    from 
    where 
    group by to_char(date,'iw') //按自然月统计 
    select to_char(date,'mm'),sum() 
    from 
    where 
    group by to_char(date,'mm') //按季统计 
    select to_char(date,'q'),sum() 
    from 
    where 
    group by to_char(date,'q') //按年统计 
    select to_char(date,'yyyy'),sum() 
    from 
    where 
    group by to_char(date,'yyyy')
      

  2.   

    高手,这个好像不是我的结果吧,再问您一下,我要如何编写这条SQL呢?
      

  3.   

    不清楚LZ统计的是哪一个字段,暂且用login_amount吧
    select max(decode(to_char(t.recordtime, 'yyyyMMdd'),
                      to_char(sysdate - 1, 'yyyyMMdd'),
                      t.login_amount,
                      0)) 前一天,
           sum(case
                 when to_char(t.recordtime, 'yyyyMMdd') <
                      to_char(sysdate, 'yyyyMMdd') and
                      to_char(t.recordtime, 'yyyyMMdd') >
                      to_char(sysdate - 31, 'yyyyMMdd') then
                  t.login_amount
                 else
                  0
               end) / 30 最近一个月,
           sum(case
                 when to_char(t.recordtime, 'yyyyMMdd') <
                      to_char(sysdate, 'yyyyMMdd') and
                      to_char(t.recordtime, 'yyyyMMdd') >
                      to_char(sysdate - 61, 'yyyyMMdd') then
                  t.login_amount
                 else
                  0
               end) / 60 最近两个月,
           sum(case
                 when to_char(t.recordtime, 'yyyyMMdd') <
                      to_char(sysdate, 'yyyyMMdd') and
                      to_char(t.recordtime, 'yyyyMMdd') >
                      to_char(sysdate - 91, 'yyyyMMdd') then
                  t.login_amount
                 else
                  0
               end) / 90 最近三个月
      from tab t
    最后一个变化趋势不清楚怎么算,LZ自己除一下吧
      

  4.   

    To 3楼:
    直接用to_char(sysdate - 31, 'yyyyMMdd')
    是不是应该用add_months?
    还有LZ好像要平均 是不是应该除一下