Oracle:将select语句的结果限制为每条记录的XXX行数

时间:2014-06-12 16:16:45

标签: sql oracle select limit

我有一个场景,我希望为表上的每个agent_ID提取前500行。 示例:

表名:代理人
架构:AGENT_ID,CUST_ID,CUST_F_NAME,CUST_L_NAME
PK:CUST_ID

情景:

AGENT_ID 1234 has 800 results
AGENT_ID 4567 has 1000 results
AGENT_ID 1212 has 300 results

我希望我的结果每个AGENT_ID最多只能提取500条记录。该表有数百个不同的AGENT_ID。

我在尝试编写一个能够提取这些数据的SQL并且想要一些帮助或建议时遇到问题。

1 个答案:

答案 0 :(得分:3)

您可以使用分析函数row_number()(或者rank())来执行此操作:

select agent_id, cust_id, cust_f_name, cust_l_name
from
( select agent_id, cust_id, cust_f_name, cust_l_name
  ,      row_number() over (partition by agent_id order by whatever) as rn
  from   agent
)
where rn <= 500;

whatever更改为可获取所需数据的列列表(最新500,最旧500或其他)。