SQL множественный выбор с COUNT (*) - PullRequest
0 голосов
/ 01 октября 2018

Я обычно не работаю в SQL, но я работаю в Oracle Responsys и столкнулся с небольшим сложным запросом фильтрации списка, который, я чувствую, может быть решен с помощью SQL.

У меня есть список250 000 идентификаторов клиентов управляются 10 000 представителей.С каждым идентификатором клиента также связана дата.

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

Что я хочу сделать - это вернуть список первых 25 записей для каждого REPRESENTATIVE_ID, упорядоченный в хронологическом порядке, поэтому, если REP 1111111 имеет 100 записей,Я хочу видеть только первые 25 записей для этого представителя.

Бонусные баллы - я также пытаюсь получить СЧЕТ для каждого представителя на основе ВСЕГО списка, а не отфильтрованного представления (AKA REP 1111111 TOTAL =785 записей)

Извиняюсь за форматирование, я также новичок в StackExchange.

1 Ответ

0 голосов
/ 01 октября 2018

Вы хотите использовать оконные функции, в частности 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

в подзапросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...