从表中取数据如果当前时间是月末取表中这月末和上月末数据,如果不是月末就取昨天数据和上个月昨天数据。
个人想法:
如果月末:select * from dm.DMPBCS_PRODUCT_L_M_FCT  
where period_id= 
to_number(TO_CHAR(LAST_DAY(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -1)),'yyyyMMdd')) 
and period_id=
TO_number(TO_CHAR(LAST_DAY(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -2)),'yyyyMMdd'))
如果非月末:select * from dm.DMPBCS_PRODUCT_L_M_FCT 
where period_id=
to_number(TO_CHAR(ADD_MONTHS(SYSDATE, 0), 'yyyyMMdd'))-1
and period_id=
to_number(TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'yyyyMMdd'))-1;也不知道自己思路对不,求各位帮忙,谢谢。

解决方案 »

  1.   

    各位除decode()外,还有其他方法不?
      

  2.   

    OK.先判断天数据是否是月末,然后写SQL!可以在程序中实现月末的判断
    if 是月末天 then
      sql=""
    else
      sql=""
    end ifexecute sql
      

  3.   


    select * 
      from dm.DMPBCS_PRODUCT_L_M_FCT   
     where (
     period_id = case when trunc(sysdate)=trunc(last_day(sysdate)) --如果是月末
                      then to_number(TO_CHAR(ADD_MONTHS(SYSDATE, -1),'yyyyMMdd')) --上月最后一天
                          else --不是月末
                               to_number(TO_CHAR(ADD_MONTHS(SYSDATE-1, -1),'yyyyMMdd')) --上月昨天                 end) or(
     period_id = case when trunc(sysdate)=trunc(last_day(sysdate)) --如果是月末
                          then to_number(TO_CHAR(SYSDATE,'yyyyMMdd')) --本月月末  
                          else --不是月末
                                to_number(TO_CHAR(SYSDATE-1,'yyyyMMdd')) --昨天
                     end);
     
      

  4.   

    end or  没折行 自己折一下,在后面没注释掉了。
      

  5.   


    select * from dm.DMPBCS_PRODUCT_L_M_FCT  
    where period_id in(to_number(TO_CHAR(LAST_DAY(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -1)),'yyyyMMdd')),TO_number(TO_CHAR(LAST_DAY(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -2)),'yyyyMMdd')))
    and trunc(sysdate)<>trunc(last_day(sysdate))
    union all
    select * from dm.DMPBCS_PRODUCT_L_M_FCT 
    where period_id in(to_number(TO_CHAR(ADD_MONTHS(SYSDATE, 0), 'yyyyMMdd'))-1,to_number(TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'yyyyMMdd'))-1)
    and trunc(sysdate)<>trunc(last_day(sysdate))
      

  6.   

    where (   
        trunc(last_day(date_field) = trunc(sysdate)
        and period_id in ( trunc(sysdate), trunc(last_day(add_month(sysdate,-1)))
    )
    or 
    (
        trunc(last_day(date_field) <> trunc(sysdate)
        and
        period_id in( trunc(sysdate-1), trunc(add_month(sysdate-1, -1)))
    )
          
      

  7.   


    select * from dm.DMPBCS_PRODUCT_L_M_FCT  
    where period_id in(to_number(TO_CHAR(LAST_DAY(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -1)),'yyyyMMdd')),TO_number(TO_CHAR(LAST_DAY(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -2)),'yyyyMMdd')))
    and trunc(sysdate)=trunc(last_day(sysdate))
    union all
    select * from dm.DMPBCS_PRODUCT_L_M_FCT 
    where period_id in(to_number(TO_CHAR(ADD_MONTHS(SYSDATE, 0), 'yyyyMMdd'))-1,to_number(TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'yyyyMMdd'))-1)
    and trunc(sysdate)<>trunc(last_day(sysdate))
      

  8.   

    试试select t1.* 
      from tbl t1,
           (select case when trunc(sysdate) = trunc(last_day(sysdate)) then trunc(sysdate)
                        else trunc(sysdate -1)
                    end sdate
              from dual) t2
     where to_date(t1.sdate, 'yyyy-mm-dd') = t2.sdate
        or to_date(t1.sdate, 'yyyy-mm-dd') = add_months(t2.sdate, -1);
      

  9.   

    date_field指的是什么。。里面括号没对齐add_months()还没小S。
      

  10.   

    data_filed 值你要判断的日期字段 
    没有小S 是失误