【问题标题】:Oracle: Limit results of a select statement to XXX number of rows for each recordOracle:将 select 语句的结果限制为每条记录的 XXX 行
【发布时间】:2014-06-12 16:16:44
【问题描述】:

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

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

场景:

AGENT_ID 1234 有 800 个结果 AGENT_ID 4567 有 1000 个结果 AGENT_ID 1212 有 300 个结果

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

我在尝试编写将提取此数据的 SQL 时遇到问题,我需要一些帮助或建议。

【问题讨论】:

  • 您真的将 AGENT 命名为包含客户的表吗?你有一个包含代理的表吗?我的意思是每个代理 1 行,带有 agent_id 主键
  • 这不是真正的表名,只是举个例子。 1 个代理有多个客户,并且在此表上,客户具有与其关联的 agent_ID。我希望能够为每个代理下拉客户列表,但每个代理的结果不超过 500。另一个系统从结果中创建一个列表并且限制为 500,因此我需要创建另一个 SQL 来拉入第 501 - 1000 行。

标签: sql oracle select limit


【解决方案1】:

你可以使用解析函数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 或其他)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多