Функции окна — Вычисление разницы между текущей и предыдущей записями

#sql #postgresql

#sql #postgresql

Вопрос:

У меня есть такие записи —

 patient claim   provider  date
460057  25494   3982      20200408
460057  25495   3982      20200410
46037   2592    396       20210110
46037   2593    393       20201210
46037   2594    394       20201114
 

Я хочу разделить записи по patient_id и упорядочить их по заявке. Затем я хочу найти разницу между датами предъявления претензий. Обратите внимание, что у разных пациентов может быть разное количество заявок.

Результат, который я ожидаю, это —

 patient claim   provider  date        diff
460057  25494   3982      20200408    2
460057  25495   3982      20200410    0
46037   2592    396       20210110    31
46037   2593    393       20201210    26
46037   2594    394       20201114    0
 

31 — это разница между 20201210 20210110 датами и

Ответ №1:

Предполагая, что даты хранятся как даты, тогда вы можете просто использовать lead() :

 select t.*,
       lead(date) over (partition by patient order by date) - date as diff
from t;
 

Если date это строка или число, то вы должны исправить данные, поэтому даты сохраняются как даты. Вы также можете преобразовать в дату в самом запросе.