表 BOXENERGY
ID   BOXID       DATE       ENERGY
1     1        2010-01-01    5.6
2     1        2010-01-02    5.7
3     1        2010-01-03    5.5
4     1        2010-01-04    5.3
.................................365   1        2010-12-31    5.3
366   1        2011-01-01    5.4
.................................xxx   2        2010-01-01    5.8
xxx   2        2010-01-02    5.7
xxx   2        2010-01-03    5.8
ID主键 有N个BOXID  对应每天的能耗数据
现要按年 、季度 、月 、星期 求 ENERGY 的和N可以是全部 单个 也可以是一部分用了substr 可以求年 月 但季度 星期不好弄用什么方法能统一一点呢?

解决方案 »

  1.   

    -- 一个季度的第一天:
    sys@SZTYORA> select trunc(sysdate,'Q') from dual;TRUNC(SYSDATE,'Q')
    -------------------
    2011-01-01 00:00:00
      

  2.   

    -- 当前年的第一天:
    sys@SZTYORA> select trunc(sysdate,'yyyy') from dual;TRUNC(SYSDATE,'Q')
    -------------------
    2011-01-01 00:00:00-- 当前月的第一天:
    select trunc(sysdate,'mm') from dual;-- 当前周的第一天
    sys@SZTYORA> select trunc(sysdate,'DAY') from dual;TRUNC(SYSDATE,'DAY'
    -------------------
    2011-02-27 00:00:00
      

  3.   

    -- 例如:按季度分组:
    SELECT BOXID, trunc(date,'Q') as Qu, sum(energy) as energy
    FROM boxenergy
    group by boxid, trunc(date,'Q');
      

  4.   

    ORA-01722: 无效数字 日期是字符串类型Qu是什么意思?
      

  5.   

    -- 那就加个to_date()函数,先将其转换成日期类型:
    SELECT BOXID, trunc(to_date(date_column,'yyyy-mm-dd),'Q') as Qu, sum(energy) as energy
    FROM boxenergy
    group by boxid, trunc(to_date(date_column,'yyyy-mm-dd),'Q');
      

  6.   

    -- 那就加个to_date()函数,先将其转换成日期类型: 
    SELECT BOXID, trunc(to_date(date_column,'yyyy-mm-dd'),'Q') as Qu, sum(energy) as energy FROM boxenergy group by boxid, trunc(to_date(date_column,'yyyy-mm-dd'),'Q');
      

  7.   

    haha   罗大侠出手   果断搞定啊
    关键是q  不是qu
      

  8.   

    不知道为什么要把存储时间字段设为字符型
    不是有date类型嘛,给以后的工作造成了不便啊
      

  9.   

    可以编译了 有点事  明天再研究 
    thank you`
      

  10.   


    select to_char(sysdate,'day') from dual;TO_CHAR(SYSDA
    -------------
    thursday
      

  11.   


    --当前时间为年的第几周 (注意当前年的第一天为周几)
    select to_char(sysdate,'ww') from dual;--当前时间为月的第几周 (注意当前月的第一天为周几)
    select to_char(sysdate,'w') from dual;
      

  12.   

    select to_char(sysdate,'day') from dual;TO_CHAR(SYSDA
    -------------
    thursday这力统计的是上个星期天到这个星期六 为1周
    我们一般是星期一到星期天
      

  13.   

    trunc 之后移动一天就好了嘛。select trunc(sysdate, 'day') + 1 from dual;
      

  14.   

    trunc 之后移动一天就好了嘛。select trunc(sysdate, 'day') + 1 from dual;
    结果还是 上个星期天到这个星期六