Расчет количества поездок без использования цикла - PullRequest
0 голосов
/ 04 сентября 2018

Я сейчас работаю над postgres, и ниже у меня есть вопрос.

У нас есть идентификатор клиента и дата, когда человек посетил объект недвижимости. Исходя из этого мне нужно рассчитать количество поездок. Последовательные даты считаются одной поездкой. Например: если человек посещает в первый день, когда поездка № является первой, напишите, что он посещает последовательно в течение трех дней, что будет засчитываться как поездка вторая.

Ниже ввод

ID  Date   
1   1-Jan  
1   2-Jan  
1   5-Jan  
1   1-Jul  
2   1-Jan  
2   2-Feb  
2   5-Feb  
2   6-Feb  
2   7-Feb  
2   12-Feb  

Ожидаемый результат

ID  Date    Trip no  
1   1-Jan   1  
1   2-Jan   1  
1   5-Jan   2  
1   1-Jul   3  
2   1-Jan   1  
2   2-Feb   2  
2   5-Feb   3  
2   6-Feb   3  
2   7-Feb   3  
2   12-Feb  4  

Я могу успешно реализовать цикл, но он работает очень медленно, учитывая объем данных.

Можете ли вы предложить обходной путь, когда мы не можем использовать цикл.

1 Ответ

0 голосов
/ 04 сентября 2018

Вычтите последовательность из дат - они будут постоянными для конкретной поездки. Тогда вы можете использовать dense_rank() для нумерации:

select t.*,
       dense_rank() over (partition by id order by grp) as trip_num
from (select t.*,
             (date - row_number() over (partition by id order by date) * interval '1 day'
             ) as grp
      from t
     ) t;
...