Where TRUNC(DATA_COMPLETE.WORK_DATE-interval '25' day ,'mm')=trunc(sysdate,'mm')我想按照财务月来统计,上月26日至本月25日为统计区间。刚才用上面的语句,当前日期是25之后的话就没问题,如果当前日期是25之前,统计出来的结果就不对了。现在脑子有点木,请高手指教。

解决方案 »

  1.   

     where DATA_COMPLETE.WORK_DATE>case
        when sysdate >to_date(to_char(sysdate, 'yyyymm') || '26', 'yyyymmdd') then
          to_date(to_char(sysdate, 'yyyymm') || '26', 'yyyymmdd')
         else
         add_months(to_date(to_char(sysdate, 'yyyymm') || '26',
                                         'yyyymmdd'),
                                 1)
         end;
    改成这样行不行
      

  2.   

    正解~测试应该是成功了。不过 好像有两个问题  第一:我们的财务月是从26日开始算的,所以应该是WORK_DATE日期大于25才对。第二,add months参数应该是-1.您在看一下,谢谢解答。
     where DATA_COMPLETE.WORK_DATE>case
      when sysdate >to_date(to_char(sysdate, 'yyyymm') || '25', 'yyyymmdd') then
      to_date(to_char(sysdate, 'yyyymm') || '26', 'yyyymmdd')
      else
      add_months(to_date(to_char(sysdate, 'yyyymm') || '25',
      'yyyymmdd'),
      -1)
      

  3.   

    2月26-3月25算3月的 
    3月26-4月25算4月的
    如果当前日期大于25日的话 应该选择workdate大于本月25日的记录
    当前日期不大于25日,选择workdate小于上月25日的记录。
    这样说对不对?
     where DATA_COMPLETE.WORK_DATE>case
      when sysdate >to_date(to_char(sysdate, 'yyyymm') || '25', 'yyyymmdd') then
      to_date(to_char(sysdate, 'yyyymm') || '25', 'yyyymmdd')
      else
      add_months(to_date(to_char(sysdate, 'yyyymm') || '25',
      'yyyymmdd'),
      -1)
      end
      

  4.   

    笔误,当前日期不大于25日,选择workdate大于上月25日的记录。