1

我有以下一组由选择返回的数据:

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

选择给出每个代码的所有数据(按代码排序)。我只想返回每个代码的最新 2 个日期的行。要返回的数据如下:

date          code     
23/01/2012    AA123
24/01/2012    AA123
17/02/2012    BB123
20/02/2012    BB123

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

select date, code
from table
where x,y,z
and rownum < 2 
order by code desc;

但它只返回前 2 行 -

4

2 回答 2

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;

代替dense_rank,您也可以使用rankrow_number。它们之间存在细微差别,因此一个可能比另一个更适合您的需求。

于 2012-10-07T11:39:31.500 回答
0

你也许可以用这个。我没有测试。

select date,code from table A where (select Count(*) from table B where A.code=B.code AND A.date > B.date ) < 2 
于 2012-10-07T11:43:02.843 回答