Лучшие практики для оконных функций в PostgreSQL - PullRequest
0 голосов
/ 21 октября 2019

У меня есть таблица со столбцами record_id и record_created_time (postgresql). Я хочу рассчитать длительность по минутам между временными рамками каждой записи. Могу ли я сделать это с помощью оконных функций (используя partition by)?

 record_id  |     record_time        | value(minute)
------------|------------------------|--------
 1          | 2019-10-01 01:00:00+02 |  0
 1          | 2019-10-01 01:03:00+02 |  3
 2          | 2019-10-01 02:00:00+02 |  0
 2          | 2019-10-01 02:05:00+02 |  5
 2          | 2019-10-01 02:07:00+02 |  2

1 Ответ

0 голосов
/ 21 октября 2019

Да, это можно сделать с помощью оконной функции lag():

select record_id, record_time, 
       record_time - lag(record_time) over (partition by record_id order by record_time) as diff_to_previous
from the_table
order by record_id, record_time;

Обратите внимание, что это вернет interval, если вам нужно значение в минутах, вам нужно преобразовать это значение:

extract(epoch from record_time - lag(record_time) over (partition by record_id order by record_time)) / 60 as minutes
...