选择行和按ID分组并排序n个最新行(按日期)

1 sql oracle group-by aggregation top-n

我有一个select返回的以下数据集:

date          code     
23/01/2012    AA123
24/01/2012    AA123
29/01/2012    AA123
06/07/2012    AA123
17/02/2012    BB123
20/02/2012    BB123
04/06/2012    BB123
Run Code Online (Sandbox Code Playgroud)

select为每个代码提供所有数据(按代码排序).我只想为每个代码返回最近2个日期的行.要返回的数据如下:

date          code     
23/01/2012    AA123
24/01/2012    AA123
17/02/2012    BB123
20/02/2012    BB123
Run Code Online (Sandbox Code Playgroud)

我如何达到预期的效果?我试过用

select date, code
from table
where x,y,z
and rownum < 2 
order by code desc;
Run Code Online (Sandbox Code Playgroud)

但它只返回前2行 -

Gol*_*rol 6

select
  date,
  code
from
    (select 
      date, 
      code,
      dense_rank() over (partition by code order by date) as rank
    from 
      table
    where 
      x,y,z)
where
  rank <= 2
order by 
  code desc;
Run Code Online (Sandbox Code Playgroud)

而不是dense_rank,你也可以使用rankrow_number.它们之间存在细微差别,因此可能比另一种更适合您的需求.