Генерация nth-вхождения в строках - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу сгенерировать номер n-го посещения для посещения каждого покупателя в магазине.

Используя следующий запрос:

select customer_id, store_id, date from visits order by date asc;

Я получаю таблицу как показано:

customer_id | store_id | date
------------------------------------------
1           | 101      | 1st November 2018
2           | 102      | 2nd November 2018
2           | 102      | 3rd November 2018
3           | 103      | 1st November 2018
2           | 102      | 4th November 2018

Я бы хотел отсортировать по дате в порядке возрастания, чтобы добавить столбец nth_visits, например:

customer_id | store_id | date              | nth_visit
-------------------------------------------------------
1           | 101      | 1st November 2018 | 1
2           | 102      | 2nd November 2018 | 1
2           | 102      | 3rd November 2018 | 2
3           | 103      | 1st November 2018 | 1
2           | 102      | 4th November 2018 | 3

Есть ли способ добиться этого при выводе в Postgresql? Я пытался использовать вложенный выбор и группирование, но все это выглядело как груша.

Я чувствую, что может быть флаг, который я могу увеличить, но я не смог найти такую ​​вещь, как:

select customer_id, store_id, date, occurance(customer_id, store_id) as nth_visit from visits order by date asc;

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете использовать оконную функцию для этого:

select customer_id, 
       store_id, 
       "date", 
       row_Number() over (partition by customer_id, store_id order by "date") as nth_visit 
from visits 
order by "date" asc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...