数据库中有一个表,表的属性列有:编号(number),日期(date),品质(quality)等等;其中,编号相同的行日期不一样。我想从表中查询出的结果是:编号为1,2,5,其日期分别为自己最近的3条记录,也就是编号为1的最近的3条记录,编号为2的最近3条记录和编号为5的最近的3条记录,请问用select * from table where number in(1,2,5)这种写法怎么才能实现?请不吝赐教!

解决方案 »

  1.   

    select * 
     (select table.*,rank() over(partition by number order by date desc) rk
       from table
     )
    from where rk<=3 and number in(1,2,5)
      

  2.   

    晕了...这样也能写错..select * from 
     (select table.*,rank() over(partition by number order by date desc) rk
       from table
     )
    where rk<=3 and number in(1,2,5)
      

  3.   


    select * from  (select row_number() over(partition by number order by date desc ) as rn
    ,A.* from A where number in (1,2,5))
    where rn<=3