#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
это строка или число, то вы должны исправить данные, поэтому даты сохраняются как даты. Вы также можете преобразовать в дату в самом запросе.