我通常不使用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条记录)
道歉的格式,我也是StackExchange的新手。
答案 0 :(得分: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
在子查询中。