1、如果我有一个表实按月份生成,表明是CM_USER_YYYYMM,我现在要统计出每个月都要定期统计前两个月的数据,如现在是6月,需要统计4月,5月的数据,如何才能实现自动修改月份MM,即每到一个新月份代码就会自动修改MM的数值。2、还是表CM_USER_YYYYMM,有时候统计几个月甚至是1年的数据,条件又很多,所以每个月份都用union all 连接,搞得一版的代码,有没有办法,查询的使用使用一句代码就能查询出CM_USER_200801~12的数据,不用一个个月Union all 连接。

解决方案 »

  1.   

    1.可以在生成表时进行判断 to_char(sysdate,'yyyy-mm')就可以取出年月
    2.多个表,这属于设计上的问题,增加了后期的操作难度,合成一个表
      

  2.   

    1、第一个可以用add_months()函数
    2、为啥不用分区表,每个月作为一个分区
      

  3.   

    但是这个月份YYYYMM是在表名上标志,使用add_months()可以吗,怎么做?
      

  4.   

    没有关系呀,百W,一年的数据据就是在千万,你可以用分区表来优化,oracle是支持的。
      

  5.   

      add_months(d,n) 日期d加n个月
      last_day(d) 包含d的月?的最后一天的日期
      new_time(d,a,b) a?区的日期和??d在b?区的日期和??
      next_day(d,day) 比日期d?,由day指定的周几的日期
      sysdate 当前的系?日期和??
      greatest(d1,d2,...dn) ?出的日期列表中最后的日期
      least(d1,k2,...dn) ?出的日期列表中最早的日期
      to_char(d [,fmt]) 日期d按fmt指定的格式??成字符串
      to_date(st [,fmt]) 字符串st按fmt指定的格式?成日期?,若fmt忽略,st要用缺省格式
      round(d [,fmt]) 日期d按fmt指定格式舍入到最近的日期
      trunc(d [,fmt]) 日期d按fmt指定格式截断到最近的日期
      to_date 字符串类型转为换日期类型
      

  6.   

    如果我有一个表实按月份生成,表明是CM_USER_YYYYMM
    ====================================================
    最适合做成分区表