表结构
  SID       SALE SDATE            REMARK
----- ---------- ---------------- --------------
    1        200 201003           无
    2       4500 201002           无
    3       2300 201001           无
    4       2600 200912           无
    5       1200 200911           无
    6       3300 200910           无
    7       3600 200909           无
    8       1900 200908           无
    9       1400 200907           无
   10        300 200906           无
   11       1200 200905           无
   12       2200 200904           无
   13       2400 200903           无
   14       2600 200902           无
   15       2300 200901           无
   16       2800 200812           无
   17       3200 200811           无想要的结果是:
用最近月份做条件 查询出来本月以及前12个月的销售额
201003  201002  201001  200912  200911  200910  200909  200908  200907  200906  200905  200904  200903
200     4500    2300    2600    1200    3300    3600    1900    1400    300     1200    2200    2400  就是根据那个日期条件 递减请大家帮帮忙~实在想不出来
先谢谢了

解决方案 »

  1.   

    select *
    from tab
    where sdate <=trunc(sysdate,'dd')
    and sdate>=trunc(sysdate-12,'dd');
      

  2.   

    sdate是数据类型是date,varchar2.上面提供的处理方法是把sdate当成date来处理的。
      

  3.   

    select sale,sdata from tab where months_between(sysdate,sdata)<=12;
    months_between是查两个日期之间的月数。
      

  4.   

     再在后面加 order by sale desc
      

  5.   

    with tab as (
       select  1 sid,  200 sale, '201003' sdate, '无' re from dual union all
       select  2 sid, 4500 sale, '201002' sdate, '无' re from dual union all
       select  3 sid, 2300 sale, '201001' sdate, '无' re from dual union all
       select  4 sid, 2600 sale, '200912' sdate, '无' re from dual union all
       select  5 sid, 1200 sale, '200911' sdate, '无' re from dual union all
       select  6 sid, 3300 sale, '200910' sdate, '无' re from dual union all
       select  7 sid, 3600 sale, '200909' sdate, '无' re from dual union all
       select  8 sid, 1900 sale, '200908' sdate, '无' re from dual union all
       select  9 sid, 1400 sale, '200907' sdate, '无' re from dual union all
       select 10 sid,  300 sale, '200906' sdate, '无' re from dual union all
       select 11 sid, 1200 sale, '200905' sdate, '无' re from dual union all
       select 12 sid, 2200 sale, '200904' sdate, '无' re from dual union all
       select 13 sid, 2400 sale, '200903' sdate, '无' re from dual union all
       select 14 sid, 2600 sale, '200902' sdate, '无' re from dual union all
       select 15 sid, 2300 sale, '200901' sdate, '无' re from dual union all
       select 16 sid, 2800 sale, '200812' sdate, '无' re from dual union all
       select 17 sid, 3200 sale, '200811' sdate, '无' re from dual)
    select *
      from tab
     where sdate between to_char(add_months(sysdate, -12), 'yyyymm') and
           to_char(sysdate, 'yyyymm')
     order by sdate desc;
      

  6.   

    SELECT SUM(T.SALE) FROM YOUR_TABLE_NAME T WHERE T.SDATE <= TO_CHAR(SYSDATE,'YYYYMM') AND T.SDATE >= TO_CHAR(ADD_MONTHS(SYSDATE,-12),'YYYYMM') GROUP BY T.SDATE 
      

  7.   

    select *
      from tab
     where sdate between to_char(add_months(sysdate, -12), 'yyyymm') and
           to_char(sysdate, 'yyyymm')
     order by sdate desc;