select * from (select * from (select companyid,distinct devcode,datetimes,watt,var from test order by datetimes desc) where rownum<3));
试试行不行

解决方案 »

  1.   

    select b.*
      from (select max(DATETIMES) DATETIMES               
              from tablename) A,
           tablename B
     where b.DATETIMES=a.DATETIMES
    union
    select b.*
     from 
    (select max(b.DATETIMES)
     from  (select b.DATETIMES,b.DEVCODE         
             from (select max(DATETIMES) DATETIMES               
                     from tablename) A,
                   tablename B
            where b.DATETIMES=a.DATETIMES) A,
           tablename B
     where b.DATETIMES<a.DATETIMES
       and b.DEVCODE<>a.DEVCODE) a,
    tablename b
    where a.DATETIMES=b.DATETIMES
      

  2.   

    8i以上可使用:
    sql>select companyid,devcode,datetimes,watt,var from 
    (select tablename.*,rank() over (partition by devcode order by datetimes desc) rk from tablename) where rk<=2;
      

  3.   

    select *  from yourtb a where (select count(*) from yourtb b 
    where a.DEVCODE=b.DEVCODE and b.DATETIMES<=a.DATETIMES )<=2 ORDER BY DEVCODE,DATETIMES  DESC
      

  4.   

    select * from 
    (select * from
    (select a.*,lead(DEVCODE,1,null) over(order by datetimes desc) lead_DEVCODE from tab a order by DATETIMES desc)
    where DEVCODE<>lead_DEVCODE)
    where rownum<3