我有一个选择返回的以下数据集:
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
select为每个代码提供所有数据(按代码排序)。我只想为每个代码返回最近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行 -
答案 0 :(得分: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
或rank
代替row_number
,而不是{{1}}。它们之间存在细微差别,因此可能比另一种更适合您的需求。
答案 1 :(得分:0)
你可以使用这个。我没有测试。
select date,code from table A where (select Count(*) from table B where A.code=B.code AND A.date > B.date ) < 2