0

我通常不在 SQL 中工作,但我在 Oracle Responsys 中工作,遇到了一些复杂的列表过滤请求,我觉得可以用 SQL 解决。

我有一个由 10,000 名代表管理的 250,000 个客户 ID 的列表。每个客户 ID 也有一个与之关联的日期。

REPRESENTATIVE_ID | CUSTOMER_ID | SIGNUP_DATE
------------------+-------------+------------
1111111           | 11111111    | 2018-01-01
1111111           | 22222222    | 2017-03-02
1111111           | 33333333    | 2017-01-02
2222222           | 44444444    | 2016-03-08
3333333           | 00000000    | 2017-01-02
3333333           | 99999999    | 2016-03-08

我想要做的是返回每个 REPRESENTATIVE_ID 的前 25 条记录的列表,按时间顺序排列,所以如果 REP 1111111 有 100 条记录,我只想查看该代表的前 25 条记录。

奖励积分——我还试图根据整个列表而不是过滤视图(AKA REP 1111111 TOTAL = 785 条记录)为每个代表获取一个 COUNT

为格式化道歉,我也是 StackExchange 的新手。

4

1 回答 1

1

您想使用窗口函数,row_number()特别是:

select t.*
from (select t.*,
             row_number() over (partition by representative_id order by signup_date) as seqnum
      from t
     ) t
where seqnum <= 25;

要获得计数,您可以使用:

count(*) over (partition by reprsentative_id) as cnt

在子查询中。

于 2018-10-01T19:30:20.503 回答