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行 -
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,你也可以使用rank或row_number.它们之间存在细微差别,因此可能比另一种更适合您的需求.
| 归档时间: |
|
| 查看次数: |
458 次 |
| 最近记录: |